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 중국어 웹사이트의 기타 관련 기사를 참조하세요!