Sql server 将变量用作多个字符串的WHERE筛选器
我有一个包含事件代码的字段,有时是两个,有时是3个 列如下所示:Sql server 将变量用作多个字符串的WHERE筛选器,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我有一个包含事件代码的字段,有时是两个,有时是3个 列如下所示: '3011, 6009' '3011, 3054' '3011, 3013' '6009, 9524' '3011, 9524' '3011, 6009, 3054' '3011, 6009, 9524' '3011, 9950' '6009, 9950' 这些组合定义了一个特定的组 我想使用变量@x并设置值。到目前为止,一切顺利 但我不确定如何
'3011, 6009'
'3011, 3054'
'3011, 3013'
'6009, 9524'
'3011, 9524'
'3011, 6009, 3054'
'3011, 6009, 9524'
'3011, 9950'
'6009, 9950'
这些组合定义了一个特定的组
我想使用变量@x并设置值。到目前为止,一切顺利
但我不确定如何在SELECT语句中使用该变量:
SELECT A, B, C
FROM TableA
WHERE EventCodes IN (@x)
谁能指出这句话的引号在哪里,我找不到。
中的
子句需要一组元素。一个变量,就像你的,是一个字符串,由你的元素串联而成,所以它们是非常不同的
您可以按如下方式创建临时表:
CREATE TABLE #app
(id varchar(10))
SELECT A, B, C
FROM TableA
WHERE EventCodes IN (SELECT id FROM #app)
插入#应用程序值('30116009'),依此类推
然后,您可以按如下方式重新编写查询:
CREATE TABLE #app
(id varchar(10))
SELECT A, B, C
FROM TableA
WHERE EventCodes IN (SELECT id FROM #app)
或
子句中的
需要一组元素。一个变量,就像你的,是一个字符串,由你的元素串联而成,所以它们是非常不同的
您可以按如下方式创建临时表:
CREATE TABLE #app
(id varchar(10))
SELECT A, B, C
FROM TableA
WHERE EventCodes IN (SELECT id FROM #app)
插入#应用程序值('30116009'),依此类推
然后,您可以按如下方式重新编写查询:
CREATE TABLE #app
(id varchar(10))
SELECT A, B, C
FROM TableA
WHERE EventCodes IN (SELECT id FROM #app)
或
如果您在2016年,您可以使用新功能。它将使用逗号分隔的字符串并返回一个表,您可以在
子句中使用该表。比如说,
SELECT A, B, C
FROM TableA
WHERE EventCodes IN STRING_SPLIT(@X, ',')
不过,如果您可以规范化您的表,那就更好了。如果您在2016年,您可以使用新函数。它将使用逗号分隔的字符串并返回一个表,您可以在子句中使用该表。比如说,
SELECT A, B, C
FROM TableA
WHERE EventCodes IN STRING_SPLIT(@X, ',')
不过,如果您可以规范化您的表,那就更好了。变量@x中的值是什么?它将是单个数字还是多个逗号分隔的值?变量@x中的值是什么?它是一个数字还是多个逗号分隔的值?这不完全是我所需要的,但你指引了我正确的方向。谢谢。这不完全是我所需要的,但你指引了我正确的方向。谢谢。我们在2008年,但是谢谢。至于正常化,有你在,但这次不是在我手中。我们在2008年,但谢谢。至于正常化,你在那里,但在这种情况下不是在我手中。