Sql server 无法从链接服务器插入具有标识列的表

Sql server 无法从链接服务器插入具有标识列的表,sql-server,insert,linked-server,identity-column,Sql Server,Insert,Linked Server,Identity Column,我有下表: use db_name; create table dbo.tbl_name( id_col int identity(1,1), col1 varchar(20), col2 varchar(50) ); 我可以在其中插入值而不会出现问题: insert into dbo.tbl_name select col1, col2 from dbo.other_tbl_name; 当我尝试从链接服务器插入到表中时,会出现问题: insert into [ser

我有下表:

  use db_name;
  create table dbo.tbl_name(
  id_col int identity(1,1),
  col1 varchar(20),
  col2 varchar(50)
  );
我可以在其中插入值而不会出现问题:

insert into dbo.tbl_name
select
col1,
col2
from dbo.other_tbl_name;
当我尝试从链接服务器插入到表中时,会出现问题:

insert into [server_name].db_name.dbo.tbl_name
select
col1,
col2
from dbo.other_tbl_name;
这将显示以下错误消息:

提供的值的列名或数目与表不匹配 定义

如果我试图将
identity\u insert
设置为打开,以便在插入中包含identity列,我会收到错误消息:

找不到对象 “server_name.db_name.dbo.tbl_name”因为 它不存在或您没有权限

这有点误导,因为我可以从表中选择,甚至可以发布
update
语句。我想我没有权限从链接服务器上设置
identity\u insert
,尽管我可以使用相同的凭据直接在服务器上进行设置


那么,如何从链接服务器插入此表?

在insert语句中明确定义列:

insert into [server_name].db_name.dbo.tbl_name (col1,col2)
select
col1,
col2
from dbo.other_tbl_name;

一般来说,遇到问题时应首先查阅文档<代码>设置标识\u插入不支持由4部分组成的名称。您应该始终为insert语句指定列列表,这是一种最佳实践。试试看,就是这样!我知道明确列出列始终被认为是最佳实践,但我认为我已经遵守了这个标准,因为select语句中有列列表。我已经习惯了这篇文章中的语法,而且因为它在一台服务器上总是有效的,所以我从来没有查过这种不同的语法。非常感谢!