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"附近给出语法错误,因为语法不正确.
有什么建议吗?
将您的代码更改为:
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)
这使您可以在查询中使用参数,并摆脱令人讨厌的双引号.