动态sql中的GUID

时间:2012-06-13 15:03:53

标签: sql-server-2008 tsql

我正在尝试在Dynamic SQL中使用uniqueidentifier类型的列。

我有一个表格X,其列ID类型为guid。

如果我这样做:

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'附近给出语法错误,因为语法不正确。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

将您的代码更改为:

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

这使您可以在查询中使用参数并消除令人讨厌的双倍 单引号。

答案 1 :(得分:3)

您的GUID值需要额外的引号:

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

EXECUTE(@sql)