आप CHECKSUM_AGG
का उपयोग कर सकते हैं . यह केवल एक तर्क लेता है, इसलिए आप 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 )