Sql 存储在字符串中的OPENQUERY查询因EXEC而失败

Sql 存储在字符串中的OPENQUERY查询因EXEC而失败,sql,sql-server,openquery,Sql,Sql Server,Openquery,我试图通过一个存在“地理”字段的链接服务器收回一些数据,因此我尝试使用openquery。 我还试图传入一个变量 谁能解释一下: 这是我的sql DECLARE @Sql VARCHAR(200) DECLARE @tnum VARCHAR(20)= 'abc'; SET @Sql = 'SELECT * FROM NationalPolygon.dbo.Polygon WHERE TitleNumber = ''''' + @tnum + ''''''; SET @Sql = 'SELECT

我试图通过一个存在“地理”字段的链接服务器收回一些数据,因此我尝试使用openquery。 我还试图传入一个变量

谁能解释一下: 这是我的sql

DECLARE @Sql VARCHAR(200)
DECLARE @tnum VARCHAR(20)= 'abc';
SET @Sql = 'SELECT * FROM NationalPolygon.dbo.Polygon WHERE TitleNumber = ''''' + @tnum + '''''';
SET @Sql = 'SELECT * FROM OPENQUERY(mylinkedserver01, ''' + REPLACE(@Sql, '?', '''') + ''')'

SELECT @Sql;
EXEC @Sql;
如果我选择@Sql并运行它,它就会工作。 如果我通过EXEC运行@Sql,它将失败:

Database 'SELECT * FROM OPENQUERY(mylinkedserver01, 'SELECT * FROM NationalPolygon' does not exist. Make sure that the name is entered correctly.
谢谢
C

您需要用括号括住@Sql

EXEC(@Sql);

EXECUTE有两种不同的语法形式。执行存储在字符串中的查询-需要在字符串(或变量)周围加括号。Ta,这就是排序结果。