首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPENQUERY错误

OPENQUERY错误
EN

Stack Overflow用户
提问于 2015-01-09 01:08:33
回答 2查看 189关注 0票数 1

我有这个问题。我应该在LinkedServer数据库中调用一个函数。所以这个数据库不会显示一个函数。

为此,我使用以下代码:

代码语言:javascript
复制
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

我有这个错误:

代码语言:javascript
复制
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.

但是,如果我尝试在指令之前使用这段代码

代码语言:javascript
复制
EXEC @TSQL

并使用它:

代码语言:javascript
复制
SELECT @TSQL

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

EN

回答 2

Stack Overflow用户

发布于 2015-01-09 01:16:15

看看EXECUTE (Transact-SQL)语法。当你使用变量时,你应该把它放在括号里。试试这个:

代码语言:javascript
复制
EXEC (@TSQL)
票数 1
EN

Stack Overflow用户

发布于 2015-01-09 01:17:39

你需要用括号把@TSQL括起来,例如:

代码语言:javascript
复制
EXEC (@TSQL);

不带括号的EXEC用于执行存储过程。例如:

代码语言:javascript
复制
DECLARE @TSQL VARCHAR(8000) = 'sp_lock';
EXEC @TSQL;

将执行存储过程sp_lock

更好的做法是使用use sp_executesql,这样可以避免歧义:

代码语言:javascript
复制
EXECUTE sp_executesql @TSQL;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27845718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档