在替换中使用单引号?

时间:2014-06-05 14:24:05

标签: sql sql-server sql-server-2008

我将以下字符串传递给我的存储过程

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

我正在尝试用'来代替'这样我的字符串就被翻译成:

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

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

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

2 个答案:

答案 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'