IDENTITY_INSERT を ON に設定して列を指定しても、リンク サーバーへの挿入時にエラーが発生します。
サーバー上に直接ある場合:
CREATE TABLE InsertTest (
PrimaryAutoKey int NOT NULL
IDENTITY(1, 1) PRIMARY KEY,
ID nvarchar(10) NOT NULL,
Description nvarchar(50)
)
INSERT INTO InsertTest(ID, Description)
VALUES ('Test01', 'First record; key auto-assigned')
SET IDENTITY_INSERT InsertTest ON
INSERT INTO InsertTest(PrimaryAutoKey, ID, Description)
VALUES (10, 'Test10', 'Second record; key specified')
SELECT * FROM InsertTest
/*
PrimaryAutoKey ID Description
-------------- ---------- --------------------------------------------------
1 Test01 First record; key auto-assigned
10 Test10 Second record; key specified
*/
これまでのところすべて順調です。しかし、これをリンクサーバーとして持つリモートサーバーから次を発行すると
INSERT INTO [LinkedServer].[DB].[dbo].InsertTest(PrimaryAutoKey, ID, Description)
VALUES (3, 'Test03', 'Third record; key specified')
エラーが発生します:
OLE DB provider "MSOLEDBSQL" for linked server "LinkedServer" returned message "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
Msg 7344, Level 16, State 1, Line 10
The OLE DB provider "MSOLEDBSQL" for linked server "LinkedServer" could not INSERT INTO table "[LinkedServer].[DB].[dbo].[InsertTest]" because of column "PrimaryAutoKey". The user did not have permission to write to the column.
sa コンテキストを使用してリンク サーバーに接続しており、RPC IN/OUT の両方が許可されています。