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语句中有列列表。我已经习惯了这篇文章中的语法,而且因为它在一台服务器上总是有效的,所以我从来没有查过这种不同的语法。非常感谢!