【问题标题】:Unable to transfer data between 2 SQL servers on the same network无法在同一网络上的 2 个 SQL 服务器之间传输数据
【发布时间】:2015-01-26 15:24:56
【问题描述】:

我正在尝试将数据从一台服务器传输到另一台服务器作为一次性练习,我已经设置了链接服务器,但身份字段仍然存在问题

SET IDENTITY_INSERT Regions On
INSERT INTO Regions SELECT * FROM ARACHNE.CMT.dbo.Regions
SET IDENTITY_INSERT Regions Off

每当我运行上面的脚本时,它都会出错

Msg 8101, Level 16, State 1, Line 2
An explicit value for the identity column in table 'Regions' can only be specified when a column list is used and IDENTITY_INSERT is ON.

但如果运行 SET IDENTITY_INSERT Regions OnSELECT * FROM ARACHNE.CMT.dbo.Regions 我会得到成功的响应。

我已经检查了目标服务器上用户的权限(这是我尝试执行此查询的地方),它确实具有插入数据和打开 identity_insert 的正确权限

【问题讨论】:

  • 使用内置的导出和导入数据向导导出数据。?
  • 使用 selct * 是一种 SQL 反模式。在插入中使用它是一种更糟糕的反模式。您需要知道一个表中的列与另一表中的正确列相匹配。

标签: sql-server linked-server data-transfer


【解决方案1】:

错误是说你必须指定一个列列表;

INSERT INTO Regions (Col1, Col2, Col3) SELECT Col1, Col2, Col3 FROM ARACHNE.CMT.dbo.Regions

【讨论】:

  • 指定显式列列表总是无论如何都是个好主意!
  • 并跳过列表中标识的id列。
  • @HLGEM 否 - 原始发布者使用的是 SET IDENTITY_INSERT Regions On,因此希望保留身份值。
  • 我不同意,他用它来获得成功,不是因为他说他需要保留身份,而是因为这听起来好像他在拼命尝试任何事情。如果他总是从第一个表中获取数据,他应该删除目标上的标识值。如果他在目标表中直接输入了其他记录,那么他不能总是成功保存身份,不应该尝试。
  • @HLGEM - Rhys Jones 是对的。我正在努力保留身份。实际上,目标数据库是目标数据库的副本。但是,我在几周前设置了目标数据库,但无法移动数据,因为我的客户仍在处理它。我需要保留身份,以便保留外键上的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2013-10-13
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多