繁体   English   中英

SQL Server 17,数据库迁移,用于在主键中设置身份的功能

[英]SQL Server 17, database migration, function for setting identity in primary key

我有两个孪生数据库,想要将一个迁移到另一个数据库。 为此,我希望有一个书面函数,以便可以通过utils函数设置主键。 我已经通过在SQL Server中使用UI来做到这一点,但是这很麻烦,因为有很多表可以重复该过程。 实用程序功能是在迁移表之前设置身份,然后在作业完成后将其删除。 例如:

insert into TABLE (colum_names) select column_names from TABLE

我想自动设置和删除身份之前和之后: 没有身份

身份集

我知道可以通过重新创建表来解决此问题,但是出于显而易见的原因(查询时间,服务器负载),我不想这样做:)

如果我没有误会,您正在使用外部实用程序执行此迁移。 在这种情况下,您可以执行SET IDENTITY_INSERT [dbo].[YourTable] ON; 迁移步骤之前,在命令中添加语句。

例如,使用C#:

using(SqlConnection myConn= new SqlConnection(conn))
{
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "SET IDENTITY_INSERT [dbo].[YourTable] ON;";
    //Migration steps here...
    cmd.CommandText += "SET IDENTITY_INSERT [dbo].[YourTable] OFF;";
}

编辑:

以下实际上是不正确的! 我忽略了每个SESSION只能为单个表设置IDENTITY_INSERT。 请参阅MS文档

根据@benjamin moskovits的评论建议,使用未记录的sp_msforeachtable ,虽然这可以为数据库中的每个表设置sp_msforeachtable IDENTITY_INSERT,但这种方法有点像是大锤,根据您的具体情况可能会产生意想不到的后果迁移模式。

exec sp_msforeachtable 'SET IDENTITY_INSERT ? ON;'

如果要对数据库中的每个表执行某项操作,则可以使用“不受支持”但在几乎每个版本的SQL Server中都广泛使用并且可用的sp_msforeachtable命令来执行某项操作。

exec   sp_msforeachtable 'select count(*) ''?'' from ?'

将为您提供数据库中每个表的列表及其包含的行数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM