我将以下字符串传递给我的存储过程
'1,2,3,4,5,6'
我正在尝试用'来代替'这样我的字符串就被翻译成:
'1','2','3','4','5','6'
这可能吗?这是我的尝试:
Declare @Var2 varchar(250)
SET @Var2 = Replace(@Var1, ',', "','")
答案 0 :(得分: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;
或者创建一个带参数的过程:
CREATE PROCEDURE dbo.SomeProcName @IDs dbo.ListOfInt READONLY
AS
BEGIN
-- DO SOMETHING
END
如果这不是一个选项,那么几乎所有关于在SQL Server中拆分字符串的知识都会在Aaron Bertrand的文章Split strings the right way – or the next best way中介绍。他已经做了很多测试,因此您可以根据自己的需求选择最佳方法。
答案 1 :(得分:0)
应该如下所示,你需要逃避额外的'
select replace(@Var1,',',''',''')
但这样做会产生一些你无法在INLIST中使用的东西。所以试试
select ''''+ replace('1,2,3,4,5,6',',',''',''') + ''''
这将导致'1','2','3','4','5','6'