SQL Escaping引号的字符

时间:2012-10-01 09:47:17

标签: c# sql sql-server

我有以下程序:

ALTER PROCEDURE [dbo].[UpdateAllClients]
    @ClientIDs varchar(max)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @vSQL varchar(max)
    SET @vSQL = 'UPDATE Clients SET LastOnline=GETDATE() WHERE ClientID IN (' + @ClientIDs  + ')';
    EXEC(@vSQL);
END

@ClientIDs包含许多客户端ID的数组,我想更新Clients表中的另一个字段,所以我希望查询看起来像:

UPDATE Clients SET LastOnline=GETDATE(), Status='Open' WHERE ClientID IN (@ClientIDs)

问题是我可以在@vSQL变量中添加引号。

有什么线索我如何在我的查询中添加“,Status ='Open'”?

2 个答案:

答案 0 :(得分:4)

使用两个引号:

SET @vSQL = 'UPDATE Clients SET LastOnline=GETDATE(), Status=''Open'' WHERE ClientID IN (' + @ClientIDs  + ')';

答案 1 :(得分:2)

我建议将客户端ID作为表值参数传递,而不是字符串。然后你就可以编写SQL而不是动态SQL。