我有两个SQL Server: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
列名或提供的值数与表定义不匹配。
有趣的是,如果我连接到Server2并使用完全相同的代码就可以了!
所以我的困惑是:当我证明我可以从Server1中插入表中的元素时,为什么这不能用于Server1。我还证明了当我在Server2上时,SQL可以工作。
SQL Server版本略有不同:
这不是一个大问题,因为我总是可以从Server2执行它。我很好奇为什么它不能从Server1
开始工作。
答案 0 :(得分:1)
您缺少第一个示例中的列。
试试这个:
INSERT INTO Server2.dbname.dbo.ContractPermission
(ContractNo, UsrCode, Extra )
SELECT
[ContractNo]
,'xxx'
,[Extra]
FROM Server2.dbname.dbo.ContractPermission
WHERE UsrCode = 'yyy'