这是一个简单的问题,我似乎想不出解决方案。
我在我的存储过程中定义了这个:
@communityDesc varchar(255) = NULL
@communityDesc 是“aaa,bbb,ccc”
在我的实际查询中我尝试使用IN
WHERE AREA IN (@communityDesc)
但这不起作用,因为我的逗号位于字符串内部,而不是像这样“aaa”,“bbb”,“ccc”
所以我的问题是,我可以对 @communityDesc 做些什么,以便它可以与我的 IN 语句一起使用,例如重新格式化字符串?
这篇文章可以帮助您解决您的问题:
http://sqlperformance.com/2012/07/t-sql-queries/split-strings http://sqlperformance.com/2012/07/t-sql-queries/split-strings
在这篇文章中,亚伦·伯特兰 (Aaron Bertrand) 正在讨论您的问题。
它真的很长而且非常详细。
一种方法是这样的:
CREATE FUNCTION dbo.SplitStrings_XML
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
FROM
(
SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
);
GO
使用此函数您只需调用:
WHERE AREA IN (SELECT Item FROM dbo.SplitStrings_XML(@communityDesc, N','))
希望这可以帮助你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)