动态sql中的GUID

gun*_*erz 1 t-sql sql-server-2008

我试图在动态SQL中使用uniqueidentifier类型的列.

我有一个表X,列ID类型为guid.

如果我做:

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

select * from X where ID = @primarykeyvalue
Run Code Online (Sandbox Code Playgroud)

这有效,但如果我尝试在动态SQL中执行相同的操作,例如:

DECLARE @sql NVARCHAR(1000)   
SET @sql = 'select * from X where ID = ' + @primarykeyvalue  
EXECUTE(@sql)
Run Code Online (Sandbox Code Playgroud)

这会在"D2DD7"附近给出语法错误,因为语法不正确.

有什么建议吗?

Mit*_*dir 5

将您的代码更改为:

DECLARE @sql NVARCHAR(1000)   
SET @sql = 'select * from X where ID = ''' + @primarykeyvalue + ''''  
EXECUTE(@sql)
Run Code Online (Sandbox Code Playgroud)

也许你应该考虑使用sp_executesql:

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

EXECUTE sp_executesql @sql, N'@key nvarchar(50)', @key = @primarykeyvalue
Run Code Online (Sandbox Code Playgroud)

这使您可以在查询中使用参数,并摆脱令人讨厌的双引号.