1

テーブルを更新し、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 番目のクエリに参加するという中間ステップを介して行う必要がありますか?

4

3 に答える 3