gpt4 book ai didi

sql - TSQL IN 表达式的问题

转载 作者:行者123 更新时间:2023-12-05 00:19:22 27 4
gpt4 key购买 nike

根据我收集到的有关 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'''

我试图在我原来的问题中进行总结,但我认为这可能会让人们偏离正题。也许这将有助于解决我的问题(除非我犯了任何愚蠢的拼写错误)。

最佳答案

IN 关键字不对字符串中的列表进行操作。它对查询中返回的值列表进行操作(或对一组离散值进行操作,例如 ('Item1','Item2'),正如 DaveE 在他的评论中提到的那样)。您可以像这样修改 @list:

DECALRE @list TABLE (
value varchar(MAX))

INSERT INTO @list (value)
VALUES ('Item1')

INSERT INTO @list (value)
VALUES ('Item2')

SELECT * FROM Table
WHERE Item IN (SELECT value FROM @list)

另一种选择是创建一个表值 UDF,它采用逗号分隔的值列表并返回表。我建议不要这样做,因为这种类型的 UDF 通常表现不佳。

关于sql - TSQL IN 表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com