标签: sql-server-2000

为什么SQL Server 2000对待SELECT test.*和SELECT t.est.*相同?

我在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)

t-sql sql-server-2000

22
推荐指数
1
解决办法
607
查看次数

SQL server 2000中的这个操作数(*= star-equals)是什么?

我有一个查询,我从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)

瞧!它似乎有效.有人能解释一下发生了什么吗?*=运算符是否将字符转换为等价的整数或?为什么我不能在网络上的任何地方找到这个运营商?

sql sql-server-2000 operands

22
推荐指数
1
解决办法
2万
查看次数

T-SQL列表表,列

在T-SQL(SQL Server 2000)中.如何列出数据库中的所有表和列?此外,在单独的查询中,有一种方法可以列出所有列以及数据类型和约束(NULLS等).谢谢.

t-sql sql-server sql-server-2000

22
推荐指数
2
解决办法
6万
查看次数

架构,MS SQL中对象的所有者

默认情况下,使用dbo所有者/模式设置对象(表,存储过程等)(我认为ms sql 2000将其称为所有者,而ms sql 2005将其称为模式)

所有者/架构实际上是数据库中的角色或用户.我总是保留默认的dbo,但我最近在微软培训书中看到了一些例子,其中一些表和存储过程有不同的所有者/模式.这样做有什么好处?为什么?

sql sql-server sql-server-2005 sql-server-2000

21
推荐指数
3
解决办法
1万
查看次数

如何将LEFT JOIN限制为SQL Server中的第一个结果?

我有一点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)

sql sql-server sql-server-2000 greatest-n-per-group

21
推荐指数
3
解决办法
4万
查看次数

检查记录是否存在,如果是,则"更新",如果不是"插入"

如果没有用于插入表的记录,我想检查表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 merge stored-procedures sql-server-2000 upsert

19
推荐指数
2
解决办法
7万
查看次数

如何在temptable中捕获DBCC-Statement的输出

我在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?

t-sql sql-server sql-server-2000

19
推荐指数
1
解决办法
1万
查看次数

您是否遇到过SQL Server无法执行的查询,因为它引用了太多表?

你有没有看到任何错误消息?

- SQL Server 2000

无法为视图或功能解析分配辅助表.
超出了查询中的最大表数(256).

- SQL Server 2005

查询中的表名太多.允许的最大值为256.

如果是的话,你做了什么?

放弃了?说服客户简化他们的需求?非规范化数据库?


@(每个人都希望我发布查询):

  1. 我不确定我是否可以在答案编辑窗口中粘贴70千字节的代码.
  2. 即使我可以这样做也无济于事,因为这70千字节的代码将引用我或者必须发布的20或30个视图,否则代码将毫无意义.

我不想听起来像我在这里吹嘘,但问题不在于查询.查询是最佳的(或至少几乎是最佳的).我花了无数个小时来优化它们,寻找可以删除的每个列和每个表.想象一下,有200或300列的报告必须用一个SELECT语句填充(因为这是几年前它仍然是一个小报告时的设计).

database sql-server sql-server-2005 sql-server-2000

18
推荐指数
1
解决办法
8364
查看次数

上次执行存储过程

在Sql Server 2000上,有没有办法找出上次执行存储过程的日期和时间?

sql-server stored-procedures sql-server-2000

18
推荐指数
2
解决办法
4万
查看次数

SQL Server服务器中的正则表达式?

是否可以使用完整的正则表达式功能集进行高效查询.

如果不是微软真的应该考虑这个功能.

regex sql-server sql-server-2005 sql-server-2000 sql-server-2008

18
推荐指数
2
解决办法
2万
查看次数