0

エラーの原因を突き止めるのに多くの時間を費やし、

このようなコードがあります。

DECLARE @GeofenceName nvarchar(50) = '';
DECLARE @sql AS NVARCHAR(MAX)

SET @sql = N'select * from GeofenceMaster where GeofenceName = GName'

EXEC sp_executesql @sql,N'GName nvarchar(50)',@GeofenceName

PRINT @sql

このようなエラーをスローします。

メッセージ 102、レベル 15、状態 1、行 1 「GName」付近の構文が正しくありません。select * from GeofenceMaster where GeofenceName = GName

誰がこの問題の原因を知っていますか?

4

2 に答える 2

2

更新

元の答えは正しくありません。括弧は必要ありません。http://msdn.microsoft.com/en-us/library/ms188001(v=sql.105).aspxを参照してください。

新しい答え

試す

DECLARE @GeofenceName nvarchar(50) = '';

DECLARE @sql AS NVARCHAR(MAX)

set @sql = N'select * from GeofenceMaster where GeofenceName = @GName'

EXEC sp_executesql @sql,N'GName nvarchar(50)',@GName=@GeofenceName

私はSQL自体を修正し、 に... = GNameなり... = @GName、実行は に..., @GeofenceNameなり..., @GName = @GeofenceNameます。

元の答え

ブラケットをいくつか追加する必要があります。

それ以外の

EXEC sp_executesql @sql,N'GName nvarchar(50)',@GeofenceName

試す

EXEC sp_executesql(@sql,N'GName nvarchar(50)',@GeofenceName)
于 2013-05-30T17:32:55.053 に答える
1

問題は変数「GName」にあります(@が必要です。この場合は@GNameになります)。次のコードを試してください。これは完全に機能します(詳細については、このリンクを参照してください):

DECLARE @sql AS NVARCHAR(MAX)
declare @GName AS nvarchar(50) = ''

SET @sql = N'select * from GeofenceMaster where GeofenceName = ''' + @GName + ''''

EXEC sp_executesql @sql,N'@GName nvarchar(50)',GName

PRINT @sql
于 2013-05-30T18:14:59.743 に答える