我正在使用 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)
和类似的方式替换inserted.locationid
并且遇到了错误Subqueries are not allowed in the OUTPUT clause
inserted
我已经看到几个答案说在 OUTPUT 子句中允许加入,但我还没有找到在and上单独加入的方法deleted
。这是否可以在 SQL Server 2008 R2 中的一个步骤中完成,或者我是否需要通过存储旧值和新值的中间步骤然后加入第二个查询以获得我需要的输出?