テーブルを更新し、TSQL OUTPUT 句を使用して変更に関するデータを追加しています。問題は、更新されたテーブルには、出力したいデータの正規化された ID しか含まれておらず、人間が読める形式にする必要があることです。これは、私が何を意味するかを示す簡単な例です
CREATE TABLE LOCATION
(locationid INT, name VARCHAR(50))
CREATE TABLE USER
(userid INT, username VARCHAR(50), locationid INT)
--insert some test data
UPDATE USER
SET locationid = @somevalue
WHERE userid = @someothervalue
私は次のようなものを追加できることを知っています
OUTPUT inserted.username
+ ' location changed from ' + deleted.locationid
+ ' to ' + inserted.locationid
しかし、それは、データベース ID ではなく、場所の名前を知りたいエンド ユーザーにとっては役に立ちません。に置き換えdeleted.locationid
てみましたが(SELECT name from LOCATION WHERE locationid = deleted.locationid)
、同様に forinserted.locationid
と エラーが発生しましたSubqueries are not allowed in the OUTPUT clause
inserted
結合が OUTPUT 句で許可されているという回答をいくつか見ましたが、と で個別に結合する方法が見つかりませんでしたdeleted
。これは、SQL Server 2008 R2 の 1 つのステップで可能ですか?それとも、古い値と新しい値を格納し、必要な出力の 2 番目のクエリに参加するという中間ステップを介して行う必要がありますか?