我正在写一段提供@Variant的代码。我希望通过在变量(运行时)中捕获它们来存储多个值,并在WHERE子句中传递它们。分享逻辑
DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''
SELECT @Variant ---- which is actually '25','33'
SELECT 'TRUE' WHERE '25' IN (@Variant)
DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''
SELECT @Variant ---- which is actually '25','33'
SELECT 'TRUE' WHERE '25' IN (SELECT @Variant)
以上查询不起作用......
--DECLARE @Variant VARCHAR(50)
--SET @Variant='''25'',''33'''
--SELECT @Variant
SELECT 'TRUE' WHERE '25' IN ('25','33')
上面是SQL Server中的一个更简单的查询 - 如果SQL接受,我尝试过。我的实际查询是在WHERE子句中的LIKE语句中传递通配符。
DECLARE @Variant VARCHAR(50)
SET @Variant =''''25%''或[Item_No] LIKE''33%'''
选择@Variant
SELECT * from Table1 WHERE [Item_No] LIKE(@Variant) - 我认为@variable将在执行期间被其值替换。
无论如何,更简单的方法 - 我在Where子句中有一个Item_No,我想要提供多张外卡。是否有类似于内联函数的方法,它应该替换@variant中的文本并执行组合。
答案 0 :(得分:2)
DECLARE @Variant VARCHAR(50) SET @Variant='''25'',''33'''
此时@Variant
包含一个字符串。
SELECT 'TRUE' WHERE '25' IN (@Variant)
鉴于25
不等于'25','33'
,这永远不会匹配。 (IN
正在寻找一个完全匹配 - 相等 - 至少有一个括号中提供的值集。)
SQL不会神奇地将字符串解析为集合。你需要告诉它。执行此操作的选项取决于您使用的特定DBMS。它们包括临时表和表值变量。
答案 1 :(得分:0)
SQL
Like
条件适用于您的场景。
DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''
SELECT 'TRUE' WHERE @Variant like '%25%'
结果是TRUE
。希望这会有所帮助。