我传递以下字符串我的存储过程在替换中使用单引号?
'1,2,3,4,5,6'
我试图取代,用“”让我的字符串翻译成:
'1','2','3','4','5','6'
这可能吗?这里是我的尝试:
Declare @Var2 varchar(250)
SET @Var2 = Replace(@Var1, ',', "','")
我传递以下字符串我的存储过程在替换中使用单引号?
'1,2,3,4,5,6'
我试图取代,用“”让我的字符串翻译成:
'1','2','3','4','5','6'
这可能吗?这里是我的尝试:
Declare @Var2 varchar(250)
SET @Var2 = Replace(@Var1, ',', "','")
它应该像下面,你需要逃避额外'
select replace(@Var1,',',''',''')
但这样做会导致一些你不能在INLIST使用。因此,尝试像
select ''''+ replace('1,2,3,4,5,6',',',''',''') + ''''
这将导致在'1','2','3','4','5','6'
@shenn,你有没有试过这个建议? – Rahul
如果你想传递的值的列表作为参数使用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在几乎一切。他做了很多测试,以便您可以根据自己的需求选择最佳方法。
如果你想使用在'IN()'条款,然后抽出时间 - 它不会有一个字符串的工作,即使它包含''' –
哦,真的?党,这就是我要做的。感谢 – shenn
这可能只是你想要什么:http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql/ –