1

我正在尝试在动态 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”附近的语法不正确。

请问有什么建议吗?

4

2 回答 2

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

这使您能够在查询中使用参数并摆脱令人讨厌的双引号。

于 2012-06-13T15:08:05.953 回答
3

您需要在 GUID 值周围加上额外的引号:

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

EXECUTE(@sql)
于 2012-06-13T15:07:33.907 回答