【问题标题】:Run stored procedure on linked server (linked server name as Parameter)在链接服务器上运行存储过程(链接服务器名称作为参数)
【发布时间】:2020-12-07 12:37:09
【问题描述】:

我正在尝试针对来自参数的链接服务器执行代码。下面是我的代码。但是我得到一个错误:

'找不到服务器'P_LINKED_SERVER'。

如何针对来自参数的服务器执行?

DECLARE @P_LINKED_SERVER AS VARCHAR(30)

SET @LINKED_SERVER = (SELECT DSS_PARAMETER_VALUE FROM [DBO].DSS_PARAMETER WHERE DSS_PARAMETER_NAME = 'Server Name')
DECLARE @sql AS VARCHAR(max)

SET @sql = 'SQL CODE'

EXEC (@sql) AT [@P_LINKED_SERVER];

非常感谢

【问题讨论】:

    标签: sql sql-server stored-procedures parameters wherescape-red


    【解决方案1】:

    链接服务器名称必须是完整语句的一部分,不能是参数。所以:

    DECLARE @P_LINKED_SERVER AS VARCHAR(30);
    
    SELECT @LINKED_SERVER = DSS_PARAMETER_VALUE
    FROM [DBO].DSS_PARAMETER
    WHERE DSS_PARAMETER_NAME = 'Server Name';
    
    DECLARE @sql AS NVARCHAR(max);
    
    SET @sql = CONCAT('EXEC SQL CODE AT ', @LINKED_SERVER);
    
    EXEC(@sql);
    

    在你的情况下,你似乎想要:

    SET @sql = CONCAT('EXEC ''DELETE FROM tablename'' AT ', @LINKED_SERVER);
    

    【讨论】:

    • 感谢您的建议,上面返回错误'关键字'DELETE'附近的语法不正确。' SET @sql = CONCAT('EXEC DELETE FROM TABLENAME ', @LINKED_SERVER)
    • 语句需要用单引号引起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多