リンクサーバーがあります リンクサーバーのテーブルにレコードを追加したい リンクサーバーを持つ別のサーバーから@@アイデンティティを取得することは可能ですか? (SQL Server 2005)別のサーバー(リンクサーバー)から@@ IDを取得
6
A
答えて
5
IDを返すストアドプロシージャをリンクサーバーに作成できます。
@@IDENTITY
ではなく、SCOPE_IDENTITY()
を使用してください。
thisを参照してください。関連する質問(挿入された行の識別情報を取得する最も良い方法は?)
0
ここではSQL Server 2012を使用しています。
私はGBN方法を試してみたが、私はこのエラーを得た:
Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.
はそれに加えて、私は分散トランザクションを使用していたとして、私の文の前にSET XACT_ABORT ON;
を追加する必要がありました。
だから私は、これを行うことにより、問題の両方を解決することになった:
BEGIN DISTRIBUTED TRANSACTION
SELECT idcolumn
FROM OPENQUERY(MyRemoteServer, '
SET XACT_ABORT ON;
INSERT INTO MyRemoteBD.dbo.SomeTable(col1,col2, ...)
OUTPUT INSERTED.idcolumn
VALUES (val1,val2, ...);
SET XACT_ABORT OFF');
COMMIT
そして、私は私の挿入からアイデンティティを取得しながら、分散トランザクションでこれを実行することができました。
このステートメントに関する奇妙な動作は、以前に分散トランザクションでなければならないInsert文を実行すると、次のIDを返しますが、何も挿入しないということです。なぜこれが起こっているのか分かりません。
編集:
は、この他の方法を試してみましたが、それが分散トランザクションにXACT_ABORT ON
の設定を必要とせずに働いていたとの取引せずに正常に動作しています。
exec [MyRemoteServer].MyRemoteBD.dbo.sp_executesql N'
INSERT INTO SomeTable (col1,col2,...)
VALUES (val1,val2,...);
SELECT SCOPE_IDENTITY()'
関連する問題
- 1. SQLサーバーのsys.sysobjectsからオブジェクトIDを取得します。
- 2. IDからのIDの取得PHP SDK
- 3. データベース内のテーブルからIDを取得
- 4. odbcドライバを使用してリンクサーバーからテーブルのリストを取得する
- 5. POP3サーバーから未回収のメッセージIDを効率的に取得する
- 6. 別のデータベースでID IDを取得する方法は?
- 7. SQLコンパクトエディションからauto_increment IDを取得
- 8. Gitlab:コミットIDからマージリクエストを取得
- 9. DotNetOpenAuth ResourceServerプリンシパルからユーザーIDを取得
- 10. 文字列からIDを取得
- 11. FirebaseからIDでJavaオブジェクトを取得
- 12. ブロードキャストレシーバーからSMS IDを取得
- 13. コアデータ&sqliteから最大IDを取得
- 14. IDでエンティティフレームワークからアイテムを取得
- 15. IDをチェックボックスから取得する
- 16. アバターからBuddyPressアクティビティIDを取得
- 17. BotoからAWSアカウントIDを取得
- 18. PHPでFacebookからユーザーIDを取得
- 19. div idからxpathコンテンツを取得
- 20. WebサイトからIISサイトIDを取得
- 21. ImageViewからリソースIDを取得
- 22. ブラウザからユーザーIDを取得する
- 23. プロセスIDからWinstation名を取得
- 24. ComオブジェクトからプロセスIDを取得
- 25. CellInfoLteからロケーションコードとセルIDを取得
- 26. Wordpress&Angular:ページIDを持つ別のページからデータを取得する方法
- 27. LinqToSql - ネストされたリストから別のIDのリストを取得する
- 28. id値を取得する方法Flexのmxmlファイルから別のmxmlファイルへ?
- 29. Android、サーバーからデータを取得
- 30. jqGridサーバー側からデフォルトエントリを取得
ストアドプロシージャの作成の意味は?私はこのリンクされたサーバーコードを実行しています: "(ローカル)]に挿入します。Identifier.dbo.test (名前) 値( 'gg')"挿入されたレコードのIDを取得するにはどうすればよいですか? –
@Raymond Morphy - まさにそれを意味します。リンクされたサーバー上でそのコードを持つストアドプロシージャを作成し、 'SCOPE_IDENTITY()'を返して、OKにします。クエリでは、リモートサーバー変数ではなく_local_サーバー変数にのみアクセスできます。 – Oded
それは、私は私の挿入ステートメントを入れて、SCOPE_IDENTITY()の後に、リモートサーバーのストアドプロシージャで意味ですか? –