使用T-SQL将OUTPUT生成的查询结果展平为纯文本?

时间:2013-06-03 10:25:03

标签: sql-server tsql text

我在OUTPUTUPDATE语句中使用INSERT子句来协调我的脚本对数据库所做的更改。出于日志记录的目的,我想将OUTPUT子句的输出展平为一个纯文本值,我可以将其插入到调试审计表的单个单元格中。

我决定使用的唯一解决方案是手动连接所有输出字段,但由于其中一些可能是NULL,我还必须在连接之前检查它,并且最终脚本看起来很难看。

是否有更简单,更优雅的方法将输出展平为纯文本,类似于使用XML子句FOR XML的方式?

1 个答案:

答案 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