リンクサーバーがあります リンクサーバーのテーブルにレコードを追加したい リンクサーバーを持つ別のサーバーから@@アイデンティティを取得することは可能ですか? (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. OraOLEDBリンクサーバーからSQL Serverがローを取得しない
- 3. 関係の別のテーブルからIDを取得するlaravel
- 4. 別のクラスのListViewからID値を取得
- 5. SQLサーバーのリンクサーバーの更新
- 6. IDからのIDの取得PHP SDK
- 7. IDからURLを取得
- 8. IDに基づいて別のテーブルからデータを取得
- 9. JavascriptサブIDから親IDを取得
- 10. 別のサーバーの別のデータベースからデータを取得する方法は?
- 11. 別のサーバーの別のPHPページからjoomlaログインを取得する
- 12. 別のページにIDを取得
- 13. odbcドライバを使用してリンクサーバーからテーブルのリストを取得する
- 14. XamarinのテーブルからIDを取得
- 15. データベース内のテーブルからIDを取得
- 16. つのテーブルからIDを取得し、
- 17. jQueryのURLから#idを取得
- 18. jQuery idからdivでidからオブジェクトを取得
- 19. 既存のサーバーをリンクサーバーにする
- 20. POP3サーバーから未回収のメッセージIDを効率的に取得する
- 21. キャンペーンID別に広告を取得
- 22. サーバーからの角の取得MVC
- 23. 特定のIDを持つ列の合計を1つのテーブルから取得し、そのIDを持つ別のテーブルから詳細を取得します。
- 24. 別のマシンから別のWebページからhtmlを取得
- 25. Laravel別のテーブルのIDを持つテーブルから値を取得する方法
- 26. div idからxpathコンテンツを取得
- 27. javascriptからID番号を取得
- 28. woocommerceゾーンIDから送料を取得
- 29. OneSignal androidからユーザーIDを取得
- 30. facebookからユーザーIDを取得する
ストアドプロシージャの作成の意味は?私はこのリンクされたサーバーコードを実行しています: "(ローカル)]に挿入します。Identifier.dbo.test (名前) 値( 'gg')"挿入されたレコードのIDを取得するにはどうすればよいですか? –
@Raymond Morphy - まさにそれを意味します。リンクされたサーバー上でそのコードを持つストアドプロシージャを作成し、 'SCOPE_IDENTITY()'を返して、OKにします。クエリでは、リモートサーバー変数ではなく_local_サーバー変数にのみアクセスできます。 – Oded
それは、私は私の挿入ステートメントを入れて、SCOPE_IDENTITY()の後に、リモートサーバーのストアドプロシージャで意味ですか? –