我想从SQLServer 2016中获取数据库并将其设置在客户端站点上的2014服务器上。
在SSMS中,我选择Tasks =>生成脚本...并获取包含所有CREATE TABLE
语句等的SQL文件。
我的印象是序列没有正确生成。序列正在使用中,其当前值大于1。但是,每个CREATE SEQUENCE
语句都有一个START WITH 1
子句。
我可以设置一下,序列根据它们的cuurenty值得到起始值吗?
答案 0 :(得分:2)
使用系统表(在这种情况下为sys.sequences
),您可以生成一个脚本,该脚本会更改所有序列的当前值。
可以在here上找到有关sys.sequences
系统表的更多信息。
首先在 SQL Server 2016 数据库上运行以下脚本:
DECLARE @sql NVARCHAR(max)=''
SELECT @sql = @sql + ' ALTER SEQUENCE ' + [name]
+ ' RESTART WITH '+ cast ([current_value] AS NVARCHAR(max))
+ CHAR(10) + CHAR(13)
FROM sys.sequences
PRINT @sql
输出应为ALTER SEQUENCE
语句的列表,其中包含所有序列的当前值;您现在可以在从SSMS生成的脚本的末尾添加此语句。
例如,在我的测试数据库中,这是先前脚本的结果:
答案 1 :(得分:0)
安德里亚(Andrea)的答案并不完全正确。 current_value
的{{1}}包含先前已分发的值。该序列应从下一个sys.sequences
值开始。因为值存储为increment
,所以需要一些额外的转换。
sql_variant