【问题标题】:Openquery select into VS insert into (SQL Server 2016) IssueOpenquery select into VS insert into (SQL Server 2016) 问题
【发布时间】:2017-01-20 02:00:49
【问题描述】:

我有以下 SQL 代码来动态地将数据填充到表中,但我现在只需要插入。我知道 select into 也创建了表,而 insert 只是填充现有表。

这是 SELECT INTO:

SET @SQL = 'Select * into destinationdb.stage.'+@Name + ' from    openquery("LINKEDSERVER", ' + '''SELECT * FROM source_db.' + @Name + ''');'

这是我尝试过的 INSERT INTO。

SET @SQL='insert into destinationdb.stage.'+@Name + ' * from  openquery("LINKEDSERVER", ' + '''SELECT * FROM source_db.' + @Name + ''');'

这当然给了我语法错误。

我尝试了许多类似的变体,想知道是否有人能在 INSERT INTO 中发现我的语法错误?

【问题讨论】:

  • 是不是因为不能在insert语句中使用*?!?

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

你需要在source_db后添加schema,插入后删除*

SELECT * FROM source_db.dbo.tablename

【讨论】:

    【解决方案2】:

    你可以试试下面的代码。

    DECLARE @SQL varchar(max) = ''
    DECLARE @Name varchar(100)='tablename' 
    
    SET @SQL = 'INSERT INTO OPENQUERY(destinationdb.stage.'+@Name + ', ''SELECT field1,field2,field3,field4 FROM db.table1'')'
    

    【讨论】:

      【解决方案3】:

      经过几次尝试,我最终自己弄清楚了! 这是有效的:

      SET @SQL=' insert into destinationdb.stage.'+@Name + ' select * from  openquery("LINKEDSERVER", ' + '''SELECT * FROM sourcedb.' + @Name + ''');'
      

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 2011-06-16
        相关资源
        最近更新 更多