【发布时间】:2020-04-24 20:59:51
【问题描述】:
根据我收集到的关于 IN 表达式的信息,这应该可行:
DECLARE @list varchar(255)
SET @list = '''Item1'',''Item2'''
SELECT
*
FROM
Table
WHERE
Item IN (@list)
它应该选择@list 中的那些项目。项目存在于表中。如果我分别为 Item1 和 Item2 执行查询(Item = Item1,然后 Item = Item2),这些单独的查询将起作用。只是不与IN。任何人都可以启发我吗?图这是一个简单的,只是很难找到有关此命令的有用信息。
编辑:
我目前正在使用动态存储过程执行此操作,其中我在字符串中构造查询并执行。例如,此过程有效:
ALTER PROCEDURE [dbo].[TestSproc]
@list varchar(4000)
AS
BEGIN
DECLARE @sql varchar(4000)
SET @sql =
'
SELECT
COUNT(*)
FROM
Items
WHERE
Item IN (' + @list + ') '
EXEC (@sql)
但是,此过程不起作用。它返回 0 行。如果我为 Item1 手动运行它,然后是 Item2,它会按预期返回两个计数:
ALTER PROCEDURE [dbo].[TestSproc]
@list varchar(4000)
AS
BEGIN
SELECT
COUNT(*)
FROM
Items
WHERE
Item IN (@list)
我使用相同的命令来调用这两个过程:
EXEC [dbo].[TestSproc]
@list = N'''Item1'',''Item2'''
我试图在我最初的问题中进行总结,但我认为这可能会让人们失去基础。也许这将有助于解决我的问题(除非我犯了任何愚蠢的错别字)。
【问题讨论】:
标签: sql sql-server tsql