首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alter sequence for all sequence to all column with max id

Alter sequence for all sequence to all column with max id
EN

Stack Overflow用户
提问于 2014-08-29 18:31:48
回答 1查看 2K关注 0票数 3

我正在尝试创建一个存储过程,它动态地重新启动一个特定模式中的所有序列,每个表的最大值为1列。

如下所示:

代码语言:javascript
复制
alter sequence @schema.@sequence 
   restart with 
     select max(@column) 
     from @table

我试过这个:

代码语言:javascript
复制
SELECT 
    t.name, c.name 
FROM 
    sys.tables t         
INNER JOIN 
    sys.all_columns c  ON c.object_id = t.object_id          
INNER JOIN 
    sys.schemas s ON s.schema_id  = t.schema_id         
WHERE 
    t.name = @table         
    AND c.name = @column        
    AND s.name = @schema  -- to find the table with column the sequence is used

SET @sql_max = 'SELECT MAX(' + @column + ') FROM ' + @table 

--to find the max value to restart the sequence
SET @sql_text = 'ALTER SEQUENCE ' + @schema + '.' + @sequence
          + ' RESTART WITH ' + @start_value
          + ' INCREMENT BY 1
              MINVALUE 0
              MAXVALUE 9223372036854775807
              CACHE  100000;';
-- to restart the sequence with max value I currently selected

我不知道如何为每个表和列设置@start_value

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 17:30:02

简单的SQL就可以做到这一点。

代码语言:javascript
复制
GO
DECLARE @seq VARCHAR(MAX);
DECLARE @sql VARCHAR(MAX);
SET @seq = (SELECT MAX(id) FROM table_name) + 1;
SET @sql = 'ALTER SEQUENCE sequence_name RESTART WITH ' + @seq  
EXEC (@sql)
GO

将table_name和sequence_name替换为您的表/序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25566498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档