> 데이터 베이스 > MySQL 튜토리얼 > SQL Server에서 업데이트된 테이블 열의 XML을 효율적으로 생성하는 방법은 무엇입니까?

SQL Server에서 업데이트된 테이블 열의 XML을 효율적으로 생성하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-23 00:16:18
원래의
244명이 탐색했습니다.

How to Generate XML of Updated Table Columns in SQL Server Efficiently?

SQL Server에서 업데이트된 테이블 열의 XML 생성

SQL Server의 COLUMNS_UPDATED 함수는 테이블 업데이트 중에 수정된 열에 대한 통찰력을 제공합니다. 그러나 XML 형식의 업데이트된 열 값만 필요한 시나리오의 경우에는 고유한 접근 방식을 제시합니다.

수정된 열 식별을 위한 자동화된 루틴

각각을 수동으로 지정하는 대신 SELECT 문의 열을 사용하면 자동화된 루틴이 테이블 구조를 기반으로 열 목록을 동적으로 생성할 수 있습니다. 이는 트리거 개발을 단순화하고 향후 테이블 수정 사항에 적응하도록 보장합니다. 예를 들어, DBCustomers 테이블에 대한 트리거에서:

CREATE TRIGGER DBCustomers_Insert
ON DBCustomers
AFTER UPDATE
AS
BEGIN
    DECLARE @sql AS NVARCHAR(1024);
    SET @sql = 'SELECT ';

    -- Get the updated columns.
    SELECT TOP (1) COLUMN_NAME
    INTO #ModifiedColumns
    FROM INFORMATION_SCHEMA.COLUMNS_UPDATED()
    ORDER BY COLUMN_NAME;

    WITH RECURSIVE ModifiedColumnsCTE AS (
        SELECT *, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) AS RowNum, COUNT(*) OVER () AS TotalRows
        FROM #ModifiedColumns
    )
    SELECT COLUMN_NAME INTO #temp
    FROM ModifiedColumnsCTE
    WHERE RowNum < TotalRows
    UNION ALL
    SELECT ',' + COLUMN_NAME
    FROM ModifiedColumnsCTE
    WHERE RowNum = TotalRows;

    -- Append the updated columns to the SELECT statement.
    SET @sql = @sql + STUFF((
        SELECT TOP (1) ColumnName
        FROM #temp
        FOR XML PATH('')
    ), 1, 2, '');

    SET @sql = @sql + ' FROM inserted FOR XML RAW';

    DECLARE @x AS XML;
    SET @x = CAST(EXEC(@sql) AS XML);

    -- Use the @x XML variable for replication purposes.
END
로그인 후 복사

Unpivoting을 사용하는 대체 솔루션

대체 접근 방식은 COLUMNS_UPDATED를 완전히 피하면서 unpivoting 기술을 활용합니다.

  • 삽입된 테이블과 삭제된 테이블 모두 피벗을 해제하여 세 개의 열: 고유 키, 수정된 열 값 및 열 이름.
  • 피벗되지 않은 테이블을 조인하고 열 값 변경, 삭제 및 삽입을 필터링합니다.
  • 결과를 별도의 테이블에 저장합니다.

이 방법을 사용하면 동적 SQL이 필요하지 않으며 테이블 구조에 관계없이 일관된 출력 형식이 보장됩니다. 이는 열 수가 많거나 정기적으로 열을 추가하는 테이블에 특히 유용합니다.

고려 사항

변경할 수 있는 자연 기본 키가 있는 테이블을 처리할 때 NEWID() 함수를 통해 GUID로 채워진 추가 열을 사용하는 것이 좋습니다. 이렇게 하면 감사 추적 목적으로 unpivoting 프로세스가 유효한 상태로 유지됩니다.

위 내용은 SQL Server에서 업데이트된 테이블 열의 XML을 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿