OPENQUERY出错

时间:2015-01-08 17:08:33

标签: sql openquery

我有这个问题。 我应该在LinkedServer数据库中调用一个Function。所以这个数据库没有给我看一个函数。

为此我使用此代码:

BEGIN
    DECLARE @TSQL varchar(8000)
    DECLARE @Data as DATE
    SET @Data = GETDATE()

    SET  @TSQL = 'SELECT PIPPO FROM OPENQUERY([SQLIMELTC\IMELTCPROD],''SELECT  [FlexNet].[dbo].[AF_GetUTCToLocal] (''''' +CAST(@Data AS NVARCHAR(100))+ ''''') AS PIPPO'' )'
    EXEC @TSQL
END

我有这个错误:

Msg 203, Level 16, State 2, Line 10
The name 'SELECT PIPPO FROM OPENQUERY([SQLIMELTC\IMELTCPROD],'SELECT  [FlexNet].[dbo].[AF_GetUTCToLocal] (''2015-01-08'') AS PIPPO' )' is not a valid identifier.

但是,如果我尝试在指令

之前使用此代码
EXEC @TSQL

并使用它:

SELECT @TSQL

执行后我在输出框中选择结果并执行它,它可以工作。 我的问题是什么?

2 个答案:

答案 0 :(得分:1)

查看EXECUTE (Transact-SQL)语法。使用变量时,应在括号中使用它。 试试这个:

EXEC (@TSQL)

答案 1 :(得分:0)

您需要在@TSQL附近加上括号,例如

EXEC (@TSQL);
没有括号的

EXEC用于执行存储过程。 e.g。

DECLARE @TSQL VARCHAR(8000) = 'sp_lock';
EXEC @TSQL;

将执行存储过程sp_lock

更好的是use sp_executesql,从而避免含糊不清:

EXECUTE sp_executesql @TSQL;