我在SQL Server 2000中查找了一个查询,并在表名的中间添加了一个句点:
SELECT t.est.* FROM test
Run Code Online (Sandbox Code Playgroud)
代替:
SELECT test.* FROM test
Run Code Online (Sandbox Code Playgroud)
并且查询仍然完美执行.甚至SELECT t.e.st.* FROM test执行没有问题.
我在SQL Server 2008中尝试了相同的查询,查询失败(错误:列前缀与查询中使用的表名或别名不匹配).出于好奇的原因,我一直在试图弄清楚SQL Server 2000如何以一种允许黄油指纹查询运行的方式处理表名,但到目前为止我没有太多运气.
任何SQL专家都知道为什么SQL Server 2000运行查询没有问题?
更新:无论使用何种接口(例如企业管理器,SSMS,OSQL),查询似乎都能正常工作,正如Jhonny在下面指出的那样,当您尝试时,它甚至可以工作:
SELECT TOP 1000 dbota.ble.* FROM dbo.table
Run Code Online (Sandbox Code Playgroud) 我有一个查询,我从ms sql 2000中提取并插入到MySql查询中.它不起作用,MySql会阻塞*=运算符.在这个例子中,我有两个名为person_name的varchar列.
SELECT * FROM tbl1 a, tbl2 b
WHERE a.id = b.id
AND a.person_name *= b.person_name
Run Code Online (Sandbox Code Playgroud)
我知道在其他语言中myInt*= myTotal也可以读作myInt*myInt = myTotal.但是,我正在使用包含所有字符的varchars,没有整数.我把它写成:
AND a.person_name * a.person_name = b.person_name
Run Code Online (Sandbox Code Playgroud)
瞧!它似乎有效.有人能解释一下发生了什么吗?*=运算符是否将字符转换为等价的整数或?为什么我不能在网络上的任何地方找到这个运营商?
在T-SQL(SQL Server 2000)中.如何列出数据库中的所有表和列?此外,在单独的查询中,有一种方法可以列出所有列以及数据类型和约束(NULLS等).谢谢.
默认情况下,使用dbo所有者/模式设置对象(表,存储过程等)(我认为ms sql 2000将其称为所有者,而ms sql 2005将其称为模式)
所有者/架构实际上是数据库中的角色或用户.我总是保留默认的dbo,但我最近在微软培训书中看到了一些例子,其中一些表和存储过程有不同的所有者/模式.这样做有什么好处?为什么?
我有一点SQL几乎正在做我想要它做的事情.我正在使用三个表,一个是Users,UserPhoneNumbers和UserPhoneNumberTypes.我正在尝试获取一个用户列表,其中包含用于导出的电话号码.
数据库本身很旧并且存在一些完整性问题.我的问题是,数据库中每个电话号码应该只有1种类型,但事实并非如此.当我运行这个时,我得到每个人的多行结果,如果它们包含例如两个"Home"数字.
如何修改SQL以获取列出的第一个电话号码并忽略其余的号码?我在SQL Server中,我知道TOP语句.但是,如果我将"TOP 1"添加到LEFT JOIN select语句,它只是给我数据库中的第一个条目,而不是每个用户的第一个条目.
这适用于SQL Server 2000.
谢谢,
SELECT Users.UserID,
Users.FirstName, Users.LastName,
HomePhone, WorkPhone, FaxNumber
FROM Users
LEFT JOIN
(SELECT UserID, PhoneNumber AS HomePhone
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Home') AS tmpHomePhone
ON tmpHomePhone.UserID = Users.UserID
LEFT JOIN
(SELECT UserID, PhoneNumber AS WorkPhone
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Work') AS tmpWorkPhone
ON tmpWorkPhone.UserID = Users.UserID
LEFT JOIN
(SELECT UserID, PhoneNumber AS FaxNumber
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Fax') …Run Code Online (Sandbox Code Playgroud) 如果没有用于插入表的记录,我想检查表PREMIUM_SERVICE_USER是否存在
strClientID更新timeValid+30的记录.strClientIDpremium_service_user
我究竟做错了什么?
它增加timeValid了+30天,但也插入了另一行.
SELECT @pre_var = count(*)
FROM PREMIUM_SERVICE_USER
WHERE strClientID = @strClientID
/* bronze premium - 200 cash */
IF @Premium = 1
BEGIN
INSERT INTO PREMIUM_SERVICE_USER
(strClientID, timeReg, timeValid, bCurrent, durum)
VALUES
(@strClientID,getdate(),getdate() + 30,'1','1')
UPDATE TB_USER
SET cash = cash+200
WHERE strAccountID = @strClientID
END
IF @Premium = 1 AND @pre_var = 1
BEGIN
UPDATE PREMIUM_SERVICE_USER
SET timevalid = timevalid+30 where strClientID = @strClientID
UPDATE PREMIUM_SERVICE_USER
SET …Run Code Online (Sandbox Code Playgroud) 我在SQL-Server上尝试了以下内容:
create table #TmpLOGSPACE(
DatabaseName varchar(100)
, LOGSIZE_MB decimal(18, 9)
, LOGSPACE_USED decimal(18, 9)
, LOGSTATUS decimal(18, 9))
insert #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS)
DBCC SQLPERF(LOGSPACE);
Run Code Online (Sandbox Code Playgroud)
...但这会增加语法错误......
任何sugestions?
你有没有看到任何错误消息?
- SQL Server 2000
无法为视图或功能解析分配辅助表.
超出了查询中的最大表数(256).- SQL Server 2005
查询中的表名太多.允许的最大值为256.
如果是的话,你做了什么?
放弃了?说服客户简化他们的需求?非规范化数据库?
@(每个人都希望我发布查询):
我不想听起来像我在这里吹嘘,但问题不在于查询.查询是最佳的(或至少几乎是最佳的).我花了无数个小时来优化它们,寻找可以删除的每个列和每个表.想象一下,有200或300列的报告必须用一个SELECT语句填充(因为这是几年前它仍然是一个小报告时的设计).
在Sql Server 2000上,有没有办法找出上次执行存储过程的日期和时间?
是否可以使用完整的正则表达式功能集进行高效查询.
如果不是微软真的应该考虑这个功能.
regex sql-server sql-server-2005 sql-server-2000 sql-server-2008
sql-server-2000 ×10
sql-server ×8
sql ×3
t-sql ×3
database ×1
merge ×1
operands ×1
regex ×1
upsert ×1