C.J*_*.J. 2 sql-server stored-procedures sql-server-2000
我有一个存储过程,它看起来像这样:
SELECT * FROM empTable
WHERE empCode IN (@employeeCode)
Run Code Online (Sandbox Code Playgroud)
将@employeeCode接受来自另一个应用程序的输入,而我无法控制该应用程序。它会给我string这样的东西:'M06', 'R02', 'B19', 'C10'
当我执行该过程时,它返回 0 行。但是,当我使用以下查询在 SQL Server 中手动运行查询时:
SELECT * FROM empTable
WHERE empCode IN ('M06', 'R02', 'B19', 'C10')
Run Code Online (Sandbox Code Playgroud)
它返回 15 行。
我怀疑当employeeCode接受输入时,它假设整个'M06', 'R02', 'B19', 'C10'为 ONE string。有人能证实这一点吗?如果这是真的,我该如何解决?
编辑:我正在使用 SQL Server 2000
这是你的救星!(5年后)
\n该函数fn_split_string_to_column使用通用分隔符获取列表并返回一个表
CREATE FUNCTION [dbo].[fn_split_string_to_column] (\n @string NVARCHAR(MAX),\n @delimiter CHAR(1)\n )\nRETURNS @out_put TABLE (\n [column_id] INT IDENTITY(1, 1) NOT NULL,\n [value] NVARCHAR(MAX)\n )\nAS\nBEGIN\n DECLARE @value NVARCHAR(MAX),\n @pos INT = 0,\n @len INT = 0\n\n SET @string = CASE \n WHEN RIGHT(@string, 1) != @delimiter\n THEN @string + @delimiter\n ELSE @string\n END\n\n WHILE CHARINDEX(@delimiter, @string, @pos + 1) > 0\n BEGIN\n SET @len = CHARINDEX(@delimiter, @string, @pos + 1) - @pos\n SET @value = SUBSTRING(@string, @pos, @len)\n\n INSERT INTO @out_put ([value])\n SELECT LTRIM(RTRIM(@value)) AS [column]\n\n SET @pos = CHARINDEX(@delimiter, @string, @pos + @len) + 1\n END\n\n RETURN\nEND\nRun Code Online (Sandbox Code Playgroud)\nSELECT * FROM empTable WHERE empCode IN (@employeeCode) -- this wont work!\nRun Code Online (Sandbox Code Playgroud)\nSELECT * FROM empTable WHERE empCode IN (\n select value from fn_split_string_to_column(@employeeCode,\',\') -- this will work!\n) \nRun Code Online (Sandbox Code Playgroud)\ndeclare @txt varchar(100) = \'a,b,c, d, e\'\nselect * from fn_split_string_to_column(@txt,\',\')\nRun Code Online (Sandbox Code Playgroud)\n\ndeclare @txt varchar(100) = \'Did you hear about the guy who lost his left arm and left leg in an accident? He\xe2\x80\x99s all right now.\'\nselect * from fn_split_string_to_column(@txt,\' \')\nRun Code Online (Sandbox Code Playgroud)\n\n上面的函数不是我的。我借用了以下问题的答案:How to split a comma-separated value to columns \n去那里给他投赞成票!\n(实际上你应该去那里阅读有关你应该了解的性能问题的评论)
\n| 归档时间: |
|
| 查看次数: |
10496 次 |
| 最近记录: |