SQL Server:从Linked Server插入数据

时间:2015-01-15 09:56:53

标签: sql-server

我有两个SQL Server:Server1Server2。服务器是链接的,链接两个服务器的用户是db_owner。

当我在Server1并写下以下内容时:

  INSERT INTO Server2.dbname.dbo.ContractPermission (ContractNo, UsrCode, Extra)
  VALUES  ('29977', 'xxx', 1)

它就像一个魅力!

但是当我在Server1时写下这个:

INSERT INTO Server2.dbname.dbo.ContractPermission
   SELECT 
       [ContractNo]
       ,'xxx'
       ,[Extra]
   FROM 
       Server2.dbname.dbo.ContractPermission
   WHERE 
       UsrCode = 'yyy'

它不起作用。返回的错误代码是:

  

Msg 213,Level 16,State 1,Line 1
  列名或提供的值数与表定义不匹配。

有趣的是,如果我连接到Server2并使用完全相同的代码就可以了!

所以我的困惑是:当我证明我可以从Server1中插入表中的元素时,为什么这不能用于Server1。我还证明了当我在Server2上时,SQL可以工作。

SQL Server版本略有不同:

  • Server1是SQL Server 2012 - 11.0.5532.0(X64)
  • Server2是SQL Server 2012 - 11.0.5058.0(X64)

这不是一个大问题,因为我总是可以从Server2执行它。我很好奇为什么它不能从Server1开始工作。

1 个答案:

答案 0 :(得分:1)

您缺少第一个示例中的列。

试试这个:

INSERT INTO Server2.dbname.dbo.ContractPermission
  (ContractNo, UsrCode, Extra )
SELECT 
  [ContractNo]
  ,'xxx'
  ,[Extra]
FROM Server2.dbname.dbo.ContractPermission
WHERE UsrCode = 'yyy'