Bạn có thể sử dụng CHECKSUM_AGG
. Nó chỉ cần một đối số duy nhất, vì vậy bạn có thể thực hiện CHECKSUM_AGG(CHECKSUM(*))
- nhưng điều này không hoạt động với kiểu dữ liệu XML của bạn, vì vậy bạn sẽ phải sử dụng SQL động.
Bạn có thể tạo động danh sách cột từ INFORMATION_SCHEMA.COLUMNS
và sau đó chèn int vào một mẫu:
DECLARE @schema_name NVARCHAR(MAX) = 'mySchemaName';
DECLARE @table_name NVARCHAR(MAX) = 'myTableName';
DECLARE @column_list NVARCHAR(MAX);
SELECT @column_list = COALESCE(@column_list + ', ', '')
+ /* Put your casting here from XML, text, etc columns */ QUOTENAME(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
AND TABLE_SCHEMA = @schema_name
DECLARE @template AS varchar(MAX)
SET @template = 'SELECT CHECKSUM_AGG(CHECKSUM({@column_list})) FROM {@schema_name}.{@table_name}'
DECLARE @sql AS varchar(MAX)
SET @sql = REPLACE(REPLACE(REPLACE(@template,
'{@column_list}', @column_list),
'{@schema_name}', @schema_name),
'{@table_name}', @table_name)
EXEC ( @sql )