2014-06-05 99 views
0

我传递以下字符串我的存储过程在替换中使用单引号?

'1,2,3,4,5,6' 

我试图取代,用“”让我的字符串翻译成:

'1','2','3','4','5','6' 

这可能吗?这里是我的尝试:

Declare @Var2 varchar(250) 
SET @Var2 = Replace(@Var1, ',', "','") 
+4

如果你想使用在'IN()'条款,然后抽出时间 - 它不会有一个字符串的工作,即使它包含''' –

+0

哦,真的?党,这就是我要做的。感谢 – shenn

+1

这可能只是你想要什么:http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql/ –

回答

0

它应该像下面,你需要逃避额外'

select replace(@Var1,',',''',''') 

但这样做会导致一些你不能在INLIST使用。因此,尝试像

select ''''+ replace('1,2,3,4,5,6',',',''',''') + '''' 

这将导致在'1','2','3','4','5','6'

+0

@shenn,你有没有试过这个建议? – Rahul

1

如果你想传递的值的列表作为参数使用table valued parameter

的第一步是创建你的类型(我倾向于去的通用名称,以便它们可以被重复使用):

CREATE TYPE dbo.ListOfInt AS TABLE (Value INT); 

然后你就可以作为参数传递相当容易:

DECLARE @T dbo.ListOfInt; 
INSERT @T (Value) VALUES (1), (2), (3); 

DECLARE @SQL NVARCHAR(MAX) = 'SELECT * FROM dbo.T WHERE ID IN (SELECT Value FROM @T)'; 
EXECUTE sp_executesql @sql, N'@T dbo.ListOfInt READONLY', @T; 

或创建带有参数的过程:


如果这是不是一种选择,那么你需要知道有关SQL Server分割字符串覆盖由阿龙贝特朗文章Split strings the right way – or the next best way在几乎一切。他做了很多测试,以便您可以根据自己的需求选择最佳方法。