【发布时间】:2016-11-16 01:44:54
【问题描述】:
我遇到了一些 SQL 查询问题,我正在创建一个变量:
declare @material varchar(500)
declare @typ varchar(200)
declare @strsql varchar(max)
set @typ = 'papier'
select @material = (SELECT + rtrim(ltrim([grupa])) + ','
FROM [test].[dbo].[GT]
WHERE (typ = @typ) FOR XML PATH(''))
set @material = left(@material, len(@material)-1)
set @material = replace(@material, ',' ,''',''')
set @material = '''' + @material + ''''
select @material
变量的输出是:
'test','test2'
这是我主要代码的一小部分:
SELECT
Number,
isnull(sum((case
when [Group] in ('test','test2')
then isnull(cast([Quantity] as int), 0)
end)), 0) as other
FROM
[dbo].[test-table]
这是正确的,但是当我尝试这样做时:
SELECT
Number,
isnull(sum((case
when [Group] in (@material)
then isnull(cast([Quantity] as int), 0)
end)), 0) as other
FROM
[dbo].[test-table]
输出错误(不同)。谁能告诉我为什么?有点像。
【问题讨论】:
-
Output is wrong, can anyone tell me, why?输出是什么? -
输出与第一个查询不同 - 它应该是相同的
-
您正在尝试将逗号分隔的 VARCHAR 列表放入变量中。如果没有动态 SQL,您将无法在 SQL 中执行此操作。请参阅此原始帖子:stackoverflow.com/questions/2944511/…
-
您必须声明 SqlParameter NVARCHAR(MAX),然后您必须使用 EXEC sp_exeutesql SQL、SqlParameter。您可以通过链接了解更多信息 msdn.microsoft.com/en-us/library/ms188001.aspx。
-
您可以将搜索值放入临时表或表变量中 - 然后执行 select ... where [group] in (select field form #tempTable)
标签: sql sql-server