【发布时间】:2013-04-28 22:05:30
【问题描述】:
我正在创建一个脚本,我在其中使用 IN 关键字查询表。 当我在 IN 子句中键入数据时,查询将按我应该执行的方式执行。但是当我创建一个包含完全相同数据的变量并在 IN 子句中使用该变量时,它不会。有什么想法???
这是有效的查询
SELECT *
FROM scpcommandeventlog
WHERE MESSAGEid = 3
AND PARAM1 IN('11416407','11416410','11416413','11416417',
'11416419','11416421','11416423','11416427',
'11416432','11416433','11416434','11416435',
'11416438','11416443','11416446','11416448',
'11416451','11416454','11416458','11416462')
这是没有的查询
SELECT * FROM scpcommandeventlog WHERE MESSAGEid = 3 AND PARAM1 IN(@list)
这是填充@list 变量的查询
DECLARE @List varchar(max)
SELECT @List = isnull(@List + ',', '') + '''' + cast(itemid as varchar) + ''''
FROM dbo.ItemList
WHERE sortid LIKE @sortid
【问题讨论】:
-
SQL Server 不会检查变量的内容以查看它是否包含逗号分隔的列表。你正在有效地做
WHERE PARAM1 = '11416407,11416410'... -
你需要查看table-valued parameters。
标签: sql sql-server-2008 tsql