1

動的SQLでuniqueidentifier型の列を使用しようとしています。

タイプguidの列IDを持つテーブルXがあります。

私が行った場合:

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 に答える