sql >> Database teknologi >  >> RDS >> Sqlserver

Beregn Hash eller Checksum for en tabel i SQL Server

Du kan bruge CHECKSUM_AGG . Det kræver kun et enkelt argument, så du kan gøre CHECKSUM_AGG(CHECKSUM(*)) - men dette virker ikke for din XML-datatype, så du bliver nødt til at ty til dynamisk SQL.

Du kan generere kolonnelisten dynamisk fra INFORMATION_SCHEMA.COLUMNS og indsæt derefter int i en skabelon:

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 )


  1. AWS-lim - Afkort destinationspostgres-tabel før indsættelse

  2. SQL Server og MySQL synkronisering

  3. Forkert COM_STMT_PREPARE-svarstørrelse. Modtaget 7. LARAVEL FEJL

  4. Er der et FIND_IN_SET efter indeks i MySQL?