我有这个问题。 我应该在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
执行后我在输出框中选择结果并执行它,它可以工作。 我的问题是什么?
答案 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;