gpt4 book ai didi

sql - 将所有序列的序列更改为具有最大 ID 的所有列

转载 作者:行者123 更新时间:2023-12-04 18:06:25 25 4
gpt4 key购买 nike

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

像这样:

alter sequence @schema.@sequence 
restart with
select max(@column)
from @table

我试过这个:

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

最佳答案

简单的 SQL 就可以解决问题

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。

关于sql - 将所有序列的序列更改为具有最大 ID 的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com