我无法使以下内容在SQL Server 2k中工作,但在2k5中可以工作:

--works in 2k5, not in 2k

create view foo as    
SELECT  usertable.legacyCSVVarcharCol as testvar     
FROM  usertable   
WHERE rsrcID in
    (  select val     
       from
       dbo.fnSplitStringToInt(usertable.legacyCSVVarcharCol, default)
    )

--error message:    
Msg 170, Level 15, State 1, Procedure foo, Line 4    
Line 25: Incorrect syntax near '.'.

因此,legacyCSVVarcharCol是包含以逗号分隔的INT列表的列。 我意识到这是一个巨大的WTF,但这是旧版代码,目前关于架构还无法做任何事情。 将“ testvar”作为参数传递给函数在2k中也不起作用。 实际上,这会导致稍有不同(甚至更奇怪的错误):

Msg 155, Level 15, State 1, Line 8

'testvar' is not a recognized OPTIMIZER LOCK HINTS option.

将硬编码的字符串作为参数传递给fnSplitStringToInt可以在2k和2k5中使用。

有谁知道为什么这在2k中不起作用? 这可能是查询计划程序中的已知错误吗? 有关如何使其工作的任何建议? 再一次,我意识到真正的答案是“不要在您的数据库中存储CSV列表!”但是,a,这超出了我的控制范围。

一些样本数据,如果有帮助的话:

INSERT INTO usertable (legacyCSVVarcharCol) values ('1,2,3');
INSERT INTO usertable (legacyCSVVarcharCol) values ('11,13,42');

请注意,表中的数据似乎无关紧要,因为这是语法错误,即使usertable完全为空,它也会发生。

编辑:意识到最初的示例可能不清楚,这是两个示例,其中一个可行,而其中一个不可行,这应突出显示正在发生的问题:

--fails in sql2000, works in 2005

SELECT t1.* 
FROM usertable t1
WHERE 1 in 
    (Select val 
     from 
     fnSplitStringToInt(t1.legacyCSVVarcharCol, ',')
    )

--works everywhere:

SELECT t1.*   
FROM usertable t1
WHERE 1 in 
    ( Select val 
      from 
      fnSplitStringToInt('1,4,543,56578', ',')
    )

请注意,唯一的区别是fnSplitStringToInt的第一个参数在2k中失败的情况下是一列,而在两个方面都成功的情况下是文字字符串。

===============>>#1 票数:1 已采纳

SQL Server 2000不支持将列值传递给表值用户定义函数,您只能使用常量,因此以下内容(简单版本)也将失败:

SELECT *, (SELECT TOP 1 val FROM dbo.fnSplitStringToInt(usertable.legacyCSVVarcharCol, ','))
FROM usertable

如您所知,它将在SQL Server 2005上运行。

===============>>#2 票数:0

我认为SS2K中的函数不能具有默认值。

在SS2K中运行此SQL会发生什么?

select val     
from dbo.fnSplitStringToInt('1,2,3', default)

  ask by sgibbons translate from so

未解决问题?本站智能推荐:

4回复

SQL Server 2k5内存消耗?

我有一个开发vm,它运行sql server以及我的堆栈的一些其他应用程序,我发现其他应用程序执行得非常糟糕。 在做了一些挖掘之后,SQL Server正在占用内存。 在快速网络搜索后,我发现默认情况下,它会消耗尽可能多的内存,以便缓存数据并将其返回给系统,就像其他应用程序请求它一样,但这个
2回复

如何判断SQL 2k5 BCP在导入失败时抱怨哪个字段?

我收到错误Error - [Microsoft][SQL Native Client] String data, right truncation在outpu日志导入失败之前Error - [Microsoft][SQL Native Client] String data, right tru
2回复

SQL Server 2k5是否保留链接服务器上的锁定提示?

我一直在努力 - 而且我自己也不是DBA,但是在尝试解决在链接服务器上执行外连接的特别昂贵(且不常见)的查询时遇到了好奇(2k5到2k5,不同的dbs on不同的物理机器)。 这个问题通常似乎不是执行时间,而是锁定,因为外连接是针对db的非常大量读取/写入的,并且想知道是否在连接语句中添加NO
1回复

SQL Server 2K-代理作业-错误和消息

我每天晚上都有一份工作。 我在存储过程中进行了自己的登录,以便在发生故障时可以知道发生了什么。 昨晚工作失败了,我知道在哪里。 当我手动运行作业时,它成功了。 所以我去了工作经历,看看我能找到什么。 我选择了“显示步骤详细信息”,并且可以看到消息。 到目前为止一切顺利,但这是
5回复

获取表列表但不包括系统表(SQL Server 2K)?

我知道我可以使用以下查询从给定数据库中获取表的列表: 我如何排除系统表呢?
1回复

SqlDataReader和SQL Server 2016 FOR JSON将json拆分为2k字节的块

最近我玩了一些for json auto Azure SQL数据库的for json auto功能的新功能。 当我使用此查询选择大量记录时: 然后使用C# SqlDataReader进行选择: 我收到了大量的数据。 为什么我们有此限制? 为什么我们不把一切都放在一大
3回复

SQL Server 2k5-不包含日志文件的数据库备份

日志文件通常很笨重。 有没有一种方法可以在没有任何日志文件(或有空日志文件)的情况下“备份” SQL Server数据库?
2回复

sql函数使用列作为参数

我试图编写一个使用列作为参数的函数。 但是,它没有用。 我想知道如何解决它。 谢谢。
3回复

你可以在SQLServer 2k5中的链接服务器表视图上有一个外键吗?

我有一个带有链接服务器的SQLServer到另一个其他数据库。 我在该链接服务器上创建了一个视图 我想谈谈以下内容 但是这会产生错误:“外键'fk1_baz_to_foo'引用对象'dbo.vw_foo',它不是用户表。” 如果我尝试使用以下内容将外键直接放在表上
5回复

CTRL + K,CTRL + F(格式代码)在MS SQL Server中不起作用

对我来说,格式选择命令在SQL Server Management Studio 2008中不起作用,我想知道是否有人知道如何使它起作用。 我不知道它是否有效。