我在OUTPUT
和UPDATE
语句中使用INSERT
子句来协调我的脚本对数据库所做的更改。出于日志记录的目的,我想将OUTPUT
子句的输出展平为一个纯文本值,我可以将其插入到调试审计表的单个单元格中。
我决定使用的唯一解决方案是手动连接所有输出字段,但由于其中一些可能是NULL
,我还必须在连接之前检查它,并且最终脚本看起来很难看。
是否有更简单,更优雅的方法将输出展平为纯文本,类似于使用XML子句FOR XML
的方式?
答案 0 :(得分:1)
试试这个 -
ALTER TRIGGER dbo.[trg_IOIU_test]
ON dbo.[vw_test]
INSTEAD OF INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE
@DocumentUID UNIQUEIDENTIFIER,
@Date DATETIME
DECLARE cur CURSOR FORWARD_ONLY READ_ONLY FOR
SELECT DocumentUID, [Date]
FROM INSERTED
OPEN cur
FETCH NEXT FROM cur INTO @DocumentUID, @Date
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE
@BeforeChange NVARCHAR(MAX)
, @AfterChange NVARCHAR(MAX)
SET @BeforeChange = (
SELECT *
FROM DELETED
WHERE [DocumentUID] = @DocumentUID FOR XML RAW, ROOT
)
SET @AfterChange = (
SELECT *
FROM INSERTED
WHERE [DocumentUID] = @DocumentUID FOR XML RAW, ROOT
)
-- insert/update statement
EXEC dbo.[AddLog]
@DocumentUID = @DocumentUID,
@BeforeChange = @BeforeChange,
@AfterChange = @AfterChange
FETCH NEXT FROM cur INTO @DocumentUID, @Date
END
CLOSE cur
DEALLOCATE cur
END