一段更新数据的脚本

把他贴出来不是因为它有多么高深,只是因为它写的足够规范,可以参考一下

 

前段代码是由于我们的开发环境的特殊性,即本地的数据库都是数据库名+test,而在dev数据库上是不带test后缀的:

 

DECLARE @maDbName SYSNAME

//DB_NAME()取得是当前的数据库名称
IF (DB_NAME() LIKE N'%Test')
BEGIN
 SET @maDbName = N'MemberArchiveTest'
END
ELSE
BEGIN
 SET @maDbName = N'MemberArchive'
END

IF (NOT EXISTS (SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID(N'dbo.Tr_Role', N'U')
   AND [name] = N'MembershipNumber'))
BEGIN
 ALTER TABLE dbo.Tr_Role
  ADD MembershipNumber NVARCHAR(255) NULL
END

IF (EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE [name] = @maDbName))
BEGIN
 DECLARE @sql NVARCHAR(MAX), @isMigrationDone BIT
 SET @sql = N'
  IF (EXISTS (SELECT 1 FROM ' + @maDbName + N'.sys.columns WHERE [object_id] = OBJECT_ID(N''' + @maDbName + N'.dbo.Tm_Member'', N''U'')
     AND [name] = N''MembershipNumber''))
  BEGIN
   SET @isMigrationDone = 0
  END
  ELSE
  BEGIN
   SET @isMigrationDone = 1
  END
  '
 EXEC sp_executesql @sql, N'@isMigrationDone BIT OUTPUT', @isMigrationDone = @isMigrationDone OUTPUT
 IF (@isMigrationDone = 0)
 BEGIN
  SET @sql = N'
   UPDATE r
    SET MembershipNumber = ma.MembershipNumber
    FROM dbo.Tr_Role r
     INNER JOIN ' + @maDbName + N'.dbo.Tm_Member ma
      ON r.PersonId = ma.PersonId AND r.OrganisationId = ma.ClubId
       AND r.IsPassive = ma.IsPassive
    WHERE r.RoleTypeId = 1
   '
  EXEC sp_executesql @sql
  
  SET @sql = N'
   USE ' + @maDbName + N'
   ALTER TABLE dbo.Tm_Member DROP COLUMN MembershipNumber
   '
  EXEC sp_executesql @sql
 END
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值