将数据库导出为脚本;序列设置不正确

时间:2018-06-14 14:14:01

标签: sql-server tsql ssms sql-server-2014 sql-server-2016

我想从SQLServer 2016中获取数据库并将其设置在客户端站点上的2014服务器上。

在SSMS中,我选择Tasks =>生成脚本...并获取包含所有CREATE TABLE语句等的SQL文件。

我的印象是序列没有正确生成。序列正在使用中,其当前值大于1。但是,每个CREATE SEQUENCE语句都有一个START WITH 1子句。

我可以设置一下,序列根据它们的cuurenty值得到起始值吗?

2 个答案:

答案 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生成的脚本的末尾添加此语句。

例如,在我的测试数据库中,这是先前脚本的结果:

enter image description here

答案 1 :(得分:0)

安德里亚(Andrea)的答案并不完全正确。 current_value的{​​{1}}包含先前已分发的值。该序列应从下一个sys.sequences值开始。因为值存储为increment,所以需要一些额外的转换。

sql_variant