「異種クエリ」とは何ですか?


14

プログラムで実行しているSQLクエリに関する次のエラーメッセージが表示されました。SQL Server 2005 T-SQL。

異種クエリでは、接続用にANSI_NULLSおよびANSI_WARNINGSオプションを設定する必要があります。これにより、一貫したクエリセマンティクスが保証されます。これらのオプションを有効にしてから、クエリを再発行してください。(重大度16)

それを修正することは、容易なセットですANSI_NULLSANSI_WARNINGS ON、私は知りたいと思ったものを異種クエリです。A Google検索がセットに私に言った結果の数十立ち上げるANSI_NULLSANSI_WARNINGS、どのような用語の意味を説明する何を。クエリは次のとおりです。

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

これは、1つのクエリで複数のデータベースエンジンに接続しているためだと考えています。
「異種」とは、このコンテキストで2つの異なるデータベースエンジンを照会することだけを指しますか?

回答:


8

「異種」とは、このコンテキストで2つの異なるデータベースエンジンを照会することだけを指しますか?

基本的にははい。「異種の」クエリは、「異種のリンクサーバー」で実行されます。このリンクサーバーへのすべてのクエリは異種です。

「異種」は分散クエリのサブセットです

  • SQL Serverの複数のインスタンスに保存された分散データ。
  • OLE DBプロバイダーを使用してアクセスされるさまざまなリレーショナルデータソースおよび非リレーショナルデータソースに格納された異種データ。

しかし、時々「異種」がポップアップします:

MSDNのリンクサーバーをご覧ください。

企業全体の異種データソースで分散クエリ、更新、コマンド、およびトランザクションを発行する機能。

sp_addlinkedserver

リンクサーバーにより、OLE DBデータソースに対する分散した異種クエリへのアクセスが可能になります。

そして、Active Directoryを照会するMSDNの例 「異種データの結合」で

そして再びMSDN 「異種データベース複製」


6

私の知る限り、はい。

クエリで見られる問題は、リンクテーブルからどの行が返されるかを知る方法がないことです。これは単なるダミーコードですか、それともクエリはこのように記述されていますか?


これはダミーコードです。40個のデータベースから取得し、それらの値のみの「ステータスレポート」テーブルに保存する単一の列があります。
ベンブロッカ

1
ああ、わかった。Srv.db.dbo.tableのその列に入力される値は、コードを実行しているSQL Serverのバージョンに応じて異なる可能性があることに注意してください。具体的には、投稿されたコードを使用してSQL 2005からSQL 2008まで、異なる値を取得します。
mrdenny

今、あなたは私に興味を持っています、潜在的な問題は何ですか、私はどの単一行を得ているのか分かりませんか?この場合、テーブルには1行しかありません。そのため、サブクエリにWHEREがありません。
ベンブロッカ

テーブルに複数の行がある場合、SQL 2005では最初の行が取得されます。SQL 2008では、新しいテーブルは2行目になります。(私はそれを逆方向に持っているかもしれません。)
mrdenny

「異種クエリ」が実際に何であるかを正確に説明するMSの記事があればよかったのですが、そのようなものは存在しないようなので、これを正しいとマークします。
ベンブロッカ

1

ヘテロジニアスとは、単に異なることを意味します。そのため、異種クエリは1つのデータベースにあり、異なるデータベースをクエリしています。データベースが異なるため、設定が異なる可能性が生じ、意図した結果とは異なる結果が生じる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.