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

SQL MERGE ステートメントの結果の判別

    できることは、一時テーブル (またはテーブル変数) を作成し、そこに出力を送信することです。意味のあるフィールドを OUTPUT 句に追加して、どの行がどのアクションによって影響を受けたかを明確にします:

    DECLARE @OutputTable TABLE (Guid UNIQUEIDENTIFIER, Action VARCHAR(100))
    
    MERGE INTO TestTable as target
    USING ( select '00D81CB4EA0842EF9E158BB8FEC48A1E' )
    AS source (Guid)
    ON ( target.Guid = source.Guid ) 
    WHEN MATCHED THEN
    UPDATE SET Test_Column = NULL
    WHEN NOT MATCHED THEN
    INSERT (Guid, Test_Column) VALUES ('00D81CB4EA0842EF9E158BB8FEC48A1E', NULL)
    OUTPUT INSERTED.Guid, $action INTO @OutputTable
    
    SELECT
       Guid, Action
    FROM
       @OutputTable
    

    更新: ああ、よし、これを .NET から呼び出したい!その場合は、 .ExecuteReader() を使用して呼び出すだけです SqlCommand のメソッド オブジェクト - OUTPUT... を使用して出力しているもの 結果セットとして .NET 呼び出し元に返されます - ループできます:

    using(SqlCommand cmd = new SqlCommand(mergeStmt, connection))
    {
       connection.Open();
    
       using(SqlDataReader rdr = cmd.ExecuteReader())
       {
          while(rdr.Read())
          {
             var outputAction = rdr.GetValue(0);
          }
    
          rdr.Close();
       }
       connection.Close();
    }
    

    そのデータ リーダーから結果の "$action" を取得する必要があります。




    1. 行内の標準偏差を選択するにはどうすればよいですか? (SQLの場合-またはR :)

    2. C#でmySQLに接続できません

    3. Javaデスクトップアプリケーションをオンラインのmysqlデータベースに接続する方法は?

    4. タグ付きビデオシステムでの関連ビデオクエリに関するアドバイスを探しています