2012-10-01 49 views
0

我有以下步驟:SQL轉義字符

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的數組,我想以更新客戶表中的另一領域,所以我希望查詢看起來像:

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

問題是我可以在@vSQL變量裏面加一個引號。

任何線索如何添加「,Status ='Open'」到我的查詢?

回答

4

使用兩個引號:

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

我會建議通過客戶端ID作爲一個表值參數,而不是字符串。然後你可以寫SQL,而不是動態SQL。

+0

+1 - 是的,這正是應該做的!它非常高效,並且不會遇到任何動態SQL的典型問題(即除了注入和格式化問題外,它對於查詢文本大小也沒有8kb的大小限制)。 – Lucero