1

我有一个存储过程,它作为参数接收要包含在查询中的值列表。例如NY, NJ, CT, PA

在存储过程中的动态 SQL 查询中,我想选择记录

WHERE state IN ('NY', 'NJ', 'CT', 'PA'). 

如果我在参数到达 SP 时使用它,我会这样做

WHERE state IN 'NY, NJ, CT, PA'.

因此,我需要转换

'NY, NJ, CT, PA' 

('NY','NJ','CT','PA').

有这样做的功能吗?

谢谢!

嘿,我认为凯文在这里指出了正确的方向。我需要做的就是:

WHERE state IN REPLACE(('NY, NJ, CT, PA'), ',' , ''',''')

或者,因为我真的把它放在一个变量中......

WHERE state IN REPLACE ((@StateList), ',' , ''',''')
4

3 回答 3

1

有很多方法可以做到这一点。一种简单的方法是将它们插入临时表(例如@temp_states)并执行以下操作:

WHERE state in (SELECT state from @temp_states)

您可以使用像这样的函数来为您生成表,而不是将它们插入到表中:

WHERE state in (SELECT * from dbo.Split(',', 'NY,NJ,CT,PA'))
于 2012-05-17T14:30:04.217 回答
1

一个非常简单的选择是:

WHERE CHARINDEX ( CONCAT (', ', state,',') ,  CONCAT (', ', @PARAM,',')) > 0
于 2012-05-17T14:37:58.223 回答
1

这是一个没有函数的有趣方法:

DECLARE @StateList VARCHAR(50)='NY, NJ, CT, PA' --(substitute for your parameter)
SELECT * FROM Table WHERE ',' + REPLACE(@StateList,' ','') + ',' LIKE '%,' + State + ',%'
于 2012-05-17T14:40:01.287 回答