在SQL WHERE子句的变量中使用带引号的值字符串
我想不出答案…也许是因为这是不可能的 有效的例子在SQL WHERE子句的变量中使用带引号的值字符串,sql,sql-server,variables,where,quotes,Sql,Sql Server,Variables,Where,Quotes,我想不出答案…也许是因为这是不可能的 有效的例子 SELECT * FROM TABLEA WHERE FIELD1 IN ('aaa','bbb','ccc') 不起作用的例子 尝试利用变量,以便在一个语句字符串中定义一次值 DECLARE @ListValues VARCHAR(50) SET @ListValues = '''aaa'',''bbb'',''ccc''' SELECT * FROM TABLEA WHERE FIELD1 IN (@ListValues) 这显然只是
SELECT * FROM TABLEA WHERE FIELD1 IN ('aaa','bbb','ccc')
不起作用的例子
尝试利用变量,以便在一个语句字符串中定义一次值
DECLARE @ListValues VARCHAR(50)
SET @ListValues = '''aaa'',''bbb'',''ccc'''
SELECT * FROM TABLEA WHERE FIELD1 IN (@ListValues)
这显然只是方程式的一小部分,还有其他原因
我无法利用表来获取值并将其更改为真正的子查询
我能找到的最接近的问题是这个。。。但显然不包括我的要求。。。
提前感谢。您可以使用动态SQL:
DECLARE @ListValues VARCHAR(MAX)
,@SQL VARCHAR(MAX)
SELECT @ListValues = '''aaa'',''bbb'',''ccc'''
,@SQL = 'SELECT * FROM TABLEA WHERE FIELD1 IN ('+@ListValues+')'
EXEC (@SQL)
它不起作用,因为中的
操作符需要一个项列表,这里是字符串
但是,@ListValues
变量提供的是一个字符串,而不是字符串列表
您可以使用表变量并将值存储在其中:
DECLARE @ListOfValues TABLE (ItemName VARCHAR(50))
INSERT INTO @ListOfValues(ItemName)
VALUES('aaa'), ('bbb'), ('ccc')
SELECT *
FROM TABLEA
WHERE FIELD1 IN (SELECT ItemName FROM @ListOfValues)
动态构建整个SQL查询(假设它存储在字符串变量@SQL
)中,
然后用EXEC(@sql)
执行它。更好的方法是使用sp_executesql
sp
因为这种方法比EXEC
更安全(不太容易SQL注入)
请参阅:SQLServer中的操作符中的需要一个值列表,如果变量是单个字符串,则解析的查询将不同
SELECT * FROM TABLEA WHERE FIELD1 IN ('aaa','bbb','ccc')
SELECT * FROM TABLEA WHERE FIELD1 IN ("'aaa','bbb','ccc'")
注意:双引号仅用于可读性,以获取包含单引号的字符串
如果您知道一种编程语言,第一种语言就像在数组中搜索,第二种语言是字符串
要在变量中存储列表,需要将其存储到表中
DECLARE @varTable TABLE (field1 varchar())
这样您就可以在
SELECT * FROM TABLEA WHERE FIELD1 IN (SELECT field1 FROM @varTable)
要向表格变量添加值,请像表格一样使用INSERT
statement。感谢marc_s的重新格式化,我看到了post的结果,并且正在执行相同的操作…检查答案…询问。我认为在概念上我更喜欢表值函数版本。