使用链接服务器EXEC时必须声明标量变量@Table

时间:2016-02-24 14:04:29

标签: mysql sql sql-server linked-server

我正在尝试执行连接链接服务器的EXEC,但它不能使用表变量。

有没有解决方法?

我的代码:

DECLARE @Table TABLE(
    ID VARCHAR(8),
    DATA DATE,
    DIA VARCHAR(2),
    MES VARCHAR(2),
    ANO VARCHAR(4)
)

INSERT INTO @Table SELECT * FROM LOCALTABLE

EXEC ('INSERT INTO SERVER2TABLE SELECT * FROM ' + @Table) AT SERVER2;

错误:

Must declare the scalar variable "@Table".

我的服务器:

SQL SERVER 2008 R2 LINKED SERVER使用MySQL ODBC 5.1驱动程序MySQL 5.6.8

2 个答案:

答案 0 :(得分:0)

尝试一次:我不确定你是如何将数据填充到表变量中的,但根据你的操作,这将有效

EXEC ('
DECLARE @Table TABLE(
    ID VARCHAR(8),
    DATA DATE,
    DIA VARCHAR(2),
    MES VARCHAR(2),
    ANO VARCHAR(4)
)

INSERT INTO SERVER2TABLE SELECT * FROM  @Table') AT SERVER2;

答案 1 :(得分:0)

您不能在动态SQL中使用类似的表变量,即使它不是链接服务器。 @Table是一个表,而不是字符串,因此您不能将其附加到字符串。即使您将其用作名称,它仍然无效,因为该变量不再位于EXEC范围内。

您是否尝试过直接插入链接服务器?我相信语法是这样的:

INSERT INTO SERVER2...SERVER2TABLE (id, data, dia, mes, ano)
SELECT id, data, dia, mes, ano
FROM @Table

假设您的目标表(SERVER2TABLE)中的列名相同。