この質問は以前に尋ねられました...しかし、私が探している正確な答えを見つけることができないようです...私はたくさんのレコードを挿入し、挿入されたID値を取り戻す必要があります...私はやっていますこれ:
INSERT MyTable(col1, ....)
OUTPUT inserted.IdentityColumn
SELECT p.i.value('@XmlAttribute', 'nvarchar(128)') FROM @myXml.nodes('/root/i') AS p(i)
これは正常に動作します...
更新可能なサブスクリプションを使用してSQLトランザクションレプリケーションを入力します。これにより、サブスクライバーのレプリケートされたテーブルにトリガーが配置されます。
このシナリオでは、OUTPUTは機能しなくなります。
だから、私は今これをやっています...しかし、私はこれについて私の腸に悪い気持ちを持っており、私は並行性の問題への扉を開いたと思います(私は前向きではありませんが)。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
DECLARE @currentIdentity bigint
SET @currentIdentity = SELECT IDENT_CURRENT('MyTable') + 1
...
SELECT IdentityColumn FROM MyTable WHERE IdentityColumn <= IDENT_CURRENT('MyTable') AND IdentityColumn >= @currentIdentity
提案?生成された一意の識別子に対してこのアプローチが機能しないため、これも悪臭を放ちます。