将数据库导出为脚本;序列设置不正确
Export Database as Scripts; Sequences not set correctly
我想从 SQLServer 2016 获取数据库并将其设置在客户站点的 2014 服务器上。
在 SSMS 中,我 select 任务 => 生成脚本...并获得一个包含所有 CREATE TABLE
语句等的 SQL 文件。
我的印象是序列生成不正确。序列正在使用中并且当前值大于 1。但是,每个 CREATE SEQUENCE
语句都有一个 START WITH 1
子句。
我能以某种方式设置序列根据其当前值获得起始值吗?
使用系统 tables(在本例中为 sys.sequences
)您可以生成一个脚本来更改所有序列的当前值。
有关 sys.sequences
系统 table 的更多信息,请参见 here。
首先 运行 在您的 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 生成的脚本末尾添加此语句。
例如,在我的测试数据库中,这是上一个脚本的结果:
Andrea 的回答并不完全正确。 sys.sequences
的 current_value
包含之前已经分发的值。该序列应从下一个 increment
值开始。需要一些额外的转换,因为值存储为 sql_variant
.
DECLARE @sql NVARCHAR(max)=''
SELECT @sql = @sql + N' ALTER SEQUENCE ' + s.name + N'.' +sq.name
+ N' RESTART WITH '+ cast (cast(sq.current_value as bigint) + cast(sq.increment as bigint) AS NVARCHAR(20))
+ CHAR(10) + CHAR(13)
FROM sys.sequences sq
join sys.schemas s on s.schema_id = sq.schema_id
PRINT @sql
我想从 SQLServer 2016 获取数据库并将其设置在客户站点的 2014 服务器上。
在 SSMS 中,我 select 任务 => 生成脚本...并获得一个包含所有 CREATE TABLE
语句等的 SQL 文件。
我的印象是序列生成不正确。序列正在使用中并且当前值大于 1。但是,每个 CREATE SEQUENCE
语句都有一个 START WITH 1
子句。
我能以某种方式设置序列根据其当前值获得起始值吗?
使用系统 tables(在本例中为 sys.sequences
)您可以生成一个脚本来更改所有序列的当前值。
有关 sys.sequences
系统 table 的更多信息,请参见 here。
首先 运行 在您的 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 生成的脚本末尾添加此语句。
例如,在我的测试数据库中,这是上一个脚本的结果:
Andrea 的回答并不完全正确。 sys.sequences
的 current_value
包含之前已经分发的值。该序列应从下一个 increment
值开始。需要一些额外的转换,因为值存储为 sql_variant
.
DECLARE @sql NVARCHAR(max)=''
SELECT @sql = @sql + N' ALTER SEQUENCE ' + s.name + N'.' +sq.name
+ N' RESTART WITH '+ cast (cast(sq.current_value as bigint) + cast(sq.increment as bigint) AS NVARCHAR(20))
+ CHAR(10) + CHAR(13)
FROM sys.sequences sq
join sys.schemas s on s.schema_id = sq.schema_id
PRINT @sql