CHECKSUM_AGG
を使用できます .引数が 1 つしかないので、 CHECKSUM_AGG(CHECKSUM(*))
を実行できます - しかし、これは XML データ型では機能しないため、動的 SQL に頼る必要があります。
INFORMATION_SCHEMA.COLUMNS
から列リストを動的に生成できます 次に int をテンプレートに挿入します:
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 )
プレ>