2012-06-13 28 views
1

我正在嘗試在動態SQL中使用uniqueidentifier類型的列。動態sql中的GUID

我有一個表X,具有類型爲GUID的列ID。

如果我做的:

declare @primarykeyvalue varchar(50) 
set @primarykeyvalue = '648D2DD7-0EB1-4E29-A996-69456753C460' 

select * from X where ID = @primarykeyvalue 

這工作,但如果我嘗試做相同的如動態SQL:

DECLARE @sql NVARCHAR(1000) 
SET @sql = 'select * from X where ID = ' + @primarykeyvalue 
EXECUTE(@sql) 

這給出了一個語法錯誤,因爲附近有語法錯誤D2DD7「 。

有什麼建議嗎?

回答

3

你需要在你的GUID值額外的引號:

DECLARE @sql NVARCHAR(1000) 
SET @sql = 'select * from X where ID = ''' + @primarykeyvalue + '''' 

EXECUTE(@sql) 
+0

非常感謝 – gunnerz

3

你的代碼更改爲:

DECLARE @sql NVARCHAR(1000) 
SET @sql = 'select * from X where ID = ''' + @primarykeyvalue + '''' 
EXECUTE(@sql) 

也許你應該考慮使用sp_executesql

DECLARE @sql NVARCHAR(1000) 
SET @sql = 'select * from X where ID = @key' 

EXECUTE sp_executesql @sql, N'@key nvarchar(50)', @key = @primarykeyvalue 

這使您在查詢中使用參數並擺脫令人討厭的加倍 單引號。