SQL 服务器:从链接服务器插入数据
SQL Server : Insert data from Linked Server
我有两个 SQL 服务器:Server1
和 Server2
。服务器已链接,链接两个服务器的用户是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
Column name or number of supplied values does not match table definition.
有趣的是,如果我连接到 Server2 并使用完全相同的代码,它就能正常工作!
所以我的困惑是:当我已经证明我可以从 Server1 向 table 中插入元素时,为什么这对 Server1 不起作用。而且我还证明 SQL 在我使用 Server2 时有效。
SQL 服务器版本略有不同:
- 服务器 1 是 SQL 服务器 2012 - 11.0.5532.0 (X64)
- Server2 是 SQL Server 2012 - 11.0.5058.0 (X64)
这不是什么大问题,因为我总是可以从 Server2 执行它。我很好奇为什么它在 Server1
.
中不起作用
您缺少第一个示例中的列。
试试这个:
INSERT INTO Server2.dbname.dbo.ContractPermission
(ContractNo, UsrCode, Extra )
SELECT
[ContractNo]
,'xxx'
,[Extra]
FROM Server2.dbname.dbo.ContractPermission
WHERE UsrCode = 'yyy'
我有两个 SQL 服务器:Server1
和 Server2
。服务器已链接,链接两个服务器的用户是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
Column name or number of supplied values does not match table definition.
有趣的是,如果我连接到 Server2 并使用完全相同的代码,它就能正常工作!
所以我的困惑是:当我已经证明我可以从 Server1 向 table 中插入元素时,为什么这对 Server1 不起作用。而且我还证明 SQL 在我使用 Server2 时有效。
SQL 服务器版本略有不同:
- 服务器 1 是 SQL 服务器 2012 - 11.0.5532.0 (X64)
- Server2 是 SQL Server 2012 - 11.0.5058.0 (X64)
这不是什么大问题,因为我总是可以从 Server2 执行它。我很好奇为什么它在 Server1
.
您缺少第一个示例中的列。
试试这个:
INSERT INTO Server2.dbname.dbo.ContractPermission
(ContractNo, UsrCode, Extra )
SELECT
[ContractNo]
,'xxx'
,[Extra]
FROM Server2.dbname.dbo.ContractPermission
WHERE UsrCode = 'yyy'