2017-01-23 136 views
0

我在AZURE SQL数据库中有一个存储过程。在那里需要将记录从#temp表插入到远程表中。 由于xxxx_table位于使用sp_execute_remote的远程数据库中。从存储过程中的#temp表中将数据插入到远程表中

下面

是情景:

Create Procedure SP1 parameter1, Parameter2 
As 

    select Distinct B.column1, B.Column2 
    into #A 
    from (Query1 
      Union 
      Query2) B 

    if (select count(1) from #A) > 0 
    Begin 

      Exec sp_execute_remote @data_source_name = N'Remotedatabase', 
      @stmt = N'INSERT INTO [dbo].[xxxx_table] 
        SELECT DISTINCT 
        'xxx' AS 'column1', 
        'xxx as 'Column2', 
        'xxx' AS 'Column3', 
        'xxx' AS 'Column4', 
        'xxx' AS Column4 
        FROM #A A INNER JOIN table1 on A.Column1 = Table1.Column2' 

    End 
    ) 

获取语法错误如下:

附近有语法错误 'XXX'。

我哪里错了?或者让我知道是否有另一种方法来实现这一点。

+0

是的。语法错误显示在column1行。我正在使用Azure SQL数据库 – user6237116

+0

我没有得到你的观点 - 不要引用字段'xxx'和列名称。例如对于column1,我必须将SSIS硬编码为Application,Column2 - > ClientName作为ClientName – user6237116

+0

你有单引号'字段在你选择句子和列名。使用column1而不是'column1'和xxx而不是'xxx' – McNets

回答

0

如果您需要在SQL中动态构建一个字符串,请引用整个句子,或者使用'some text'+'another text'来连接句子。如果你必须添加单引号使用双单引号“”

例子:

DECLARE @param1 int; 
DECLARE @param1 VARCHAR(10); 

SET @param1 = 10; 
SET @param2 = 'CCDOS87' 

@Stmt = 'SELECT Field1 FROM TableName WHERE Field1 = ' 
     + CAST(@param1 AS VARCHAR(100)) 
     + ' AND Field1 = ''' 
     + param2 
     + ''''; <- This is a single ' 

     @stmt = N'INSERT INTO [dbo].[Error_table] 
       SELECT DISTINCT 
       xxx AS column1, 
       xxx as Column2, 
       xxx AS Column3, 
       xxx AS Column4, 
       xxx AS Environment 
       FROM #A A INNER JOIN table1 on A.Column1 = Table1.Column2' 

更新

如果你的表是在不同的数据库,但在同一服务器中使用:

INSERT INTO SERVER.SCHEMA.TABLE_NAME 
SELECT Something 
    FROM SERVER.SCHEMA.TABLE_NAME 
相关问题