Is there a practical way of migrating from identity columns to hilo keys?

前端 未结 5 1267
面向向阳花
面向向阳花 2021-02-01 08:11

I work with a database that depends heavily on identity columns. However as we have now moved all applications over to NHibernate I wanted to look into using HiLo as seems to be

5条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-01 08:38

    Here's a script (MS SQL) that will fill HiLo(Name,Value) table with all next high numbers for all tables in current database:

    declare tables cursor for
    
        select
            Table_Schema,
            Table_Name
        from
            information_schema.tables
        where
            Table_Schema = 'dbo'
            and
            Table_Type = 'BASE TABLE'
            and
            Table_Name <> 'HiLo'
            and
            right (Table_Name, 1) <> '_'
    
    declare @table_schema varchar(255)
    declare @table_name varchar(255)
    
    truncate table HiLo
    
    open tables
    fetch next from tables into @table_schema, @table_name
    
    while (@@fetch_status = 0)
    begin
        declare @sql as nvarchar(max)
        declare @max_id as int
    
        set @sql = 'select @max_id = max(Id) from [' + @table_schema + '].[' + @table_name + ']'
        exec sp_executesql @sql, N'@max_id int output', @max_id output
    
        declare @max_low as int
        set @max_low = 1000
    
        declare @next_high as int
        set @next_high = isnull (@max_id / @max_low + 1, 0)
    
        --select @table_name, @max_id, @next_high
        insert into HiLo (Name, Value) values (@table_schema + '.' + @table_name, @next_high)
    
        fetch next from tables into @table_schema, @table_name
    end
    
    close tables
    deallocate tables
    
    select * from HiLo
    

提交回复
热议问题