我正在尝试在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'附近给出语法错误,因为语法不正确。
有什么建议吗?
答案 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)