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”附近的语法不正确。从 GeofenceMaster 中选择 *,其中 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 回答