sql >> データベース >  >> RDS >> Sqlserver

SQLServerでUPDATEパススルークエリを実行する方法

    SQL Serverでは、OPENQUERY 行セット関数を使用すると、リンクサーバーでパススルークエリを実行できます。

    OPENQUERY FROMで一般的に参照されます テーブルであるかのようにクエリの句。ただし、INSERTのターゲットテーブルとして参照することもできます。 、UPDATE 、またはDELETE ステートメント。

    この記事では、OPENQUERYの使用例を紹介します。 UPDATEを実行するには パススルークエリ。

    Homerというリンクサーバーがあるとします。 Petsにテーブルがあります Catsというデータベース 次のデータを使用します。

    SELECT * FROM OPENQUERY (
        Homer, 
        'SELECT * FROM Pets.dbo.Cats'
        );

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 1       | FluffDupp |
    | 2       | Scratch   |
    | 3       | Long Tail |
    +---------+-----------+

    そして、猫の名前の1つを更新したいとします。

    UPDATEを使用してそれを行うことができます このように、リンクサーバーに対するパススルークエリ。

    UPDATE OPENQUERY (
        Homer, 
        'SELECT CatName FROM Pets.dbo.Cats WHERE CatId = 3'
        )
    SET CatName = 'Short Tail';

    結果:

    (1 row affected)

    結果を確認する

    これで、SELECTを実行できます 結果を確認するためのパススルークエリ。

    SELECT * FROM OPENQUERY (
        Homer, 
        'SELECT * FROM Pets.dbo.Cats'
        );

    結果:

    +---------+------------+
    | CatId   | CatName    |
    |---------+------------|
    | 1       | FluffDupp  |
    | 2       | Scratch    |
    | 3       | Short Tail |
    +---------+------------+

    予想どおり、3行目が更新されました。

    私が指摘しなければならないことの1つは、OPENQUERY 引数に変数を受け入れません。


    1. phpMyAdminで関数を作成しています-エラー:アクセスが拒否されましたこの操作にはスーパー特権が必要です

    2. pl / sqlの表から行タイプを返す関数を実行するにはどうすればよいですか?

    3. ORA-00900:無効なSQL文-Oracle10gでプロシージャを実行する場合

    4. SELECTステートメントでto_date例外を処理して、それらの行を無視するにはどうすればよいですか?