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

更新された行を取得

    実行している内容によっては、OUTPUTのテーブル構文を使用する必要がある場合があります。 。一時的なテーブル/テーブル変数を指定する可能性があります。

    DECLARE @T TABLE
    (
        MyID INT NOT NULL
    )
    
    UPDATE Task
    SET MyTime = GetDate(), MyUserId = @userid
    OUTPUT INSERTED.MyID INTO @T
    FROM (/* your FROM clause here */) Task
    

    gbnは、基本的に上記と同じことを言う編集を私の前に持っていました。これを行う別の方法は、最初にIDを取得してから、IDで更新することです。また、TOP1はほとんどの場合ORDER BYで使用する必要があります 。

    -- You may need to clean up the error handling. I just wanted
    -- to put something simple in to remind that it is necessary.
    DECLARE @userid INT; SET @userid = /* e.g., */ 1234
    BEGIN TRANSACTION
    IF @@ERROR <> 0 RETURN
    DECLARE @TaskID INT
    SET @TaskID = (SELECT TOP 1 TaskID FROM Task WITH (UPDLOCK) ORDER BY /* e.g., */ TaskID) -- TaskID should be the PK of MyTable. Must be unique.
    IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN END
    UPDATE Task
    SET MyTime = GETDATE(), MyUserId = @userid
    WHERE TaskID = @TaskID
    COMMIT TRANSACTION
    


    1. データベース内の履歴ルックアップ値を最適に管理するにはどうすればよいですか?

    2. PostgreSQLと認証システムの統合

    3. 列のないSELECTが有効なのはなぜですか

    4. Oracle:関数ベースのインデックス選択的一意性