zoukankan      html  css  js  c++  java
  • 数据库升级脚本

    场景; 使用测试库完成表设计及功能设计后, 存储过程, 表结构如何同步到正式库去, 需要根据相应日期打包升级.

    用法: (脚本执行有先后顺序, 表结构, 索引,触发器,函数. 从底倒上)

     --2、表
     EXEC [sp_MakeScripts] 'u', '[A-Z][0-9]%', '2017-08-01'  
     --3、索引
     EXEC [sp_MakeScripts] 'i', '[A-Z][0-9]%', '2017-08-01'  
     --5、触发器
     EXEC [sp_MakeScripts] 'TR', '%', '2017-08-01' 
     --6、函数
     EXEC [sp_MakeScripts] 'fn', '%', '2017-08-01'
     --7、视图
     EXEC [sp_MakeScripts] 'V', '%', '2017-08-01'
     --8、过程
     EXEC [sp_MakeScripts] 'P', '%', '2017-08-01'

    存储过程: 

    /*----------------------------------------------------------*/
    /*    [sp_MakeScripts]                                      */
    /*----------------------------------------------------------*/
    IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[sp_MakeScripts]' ) AND OBJECTPROPERTY( object_id, N'IsProcedure') = 1 )
    DROP PROCEDURE [sp_MakeScripts]
    GO
    CREATE PROC [dbo].[sp_MakeScripts]
    ( 
    @Type nvarchar(256), --表'U' 索引'I' 函数'FN' 视图'V' 触发器'TR' 过程'P'
    @objname nvarchar(776) = 'A[0-2]%', 
    @CreateDate DATETIME='1900-01-01'  
     )
    as 
    BEGIN
       /*
       功能:主要用于生成升级脚本
       参数: @Type 生成的类型 表'U' 索引'I' 函数'FN' 视图'V' 触发器'TR' 过程'P'
              @objname 数据库中的表名如果结尾是%,则取全部相似的表
              @CreateDate 大于或等于@CreateDate后创建的脚本
       调用: --1、表
              EXEC [sp_MakeScripts] 'u', 'b1%', '2015-01-12'
              --2、索引及主键
              EXEC [sp_MakeScripts] 'i', 'b1%', '2015-01-12' 
              --4、触发器
              EXEC [sp_MakeScripts] 'TR', '%', '2015-01-12' 
              --5、函数
              EXEC [sp_MakeScripts] 'fn', '%', '2015-01-12'
              --6、视图
              EXEC [sp_MakeScripts] 'V', '%', '2015-01-12'
              --7、过程
              EXEC [sp_MakeScripts] 'P', '%', '2015-01-12'
       */
       SET NOCOUNT ON
       
       declare @TableName nvarchar(128) 
       declare @Scripts nvarchar(max) 
       declare @i INT
       DECLARE @newtypename nvarchar(256)
       DECLARE @Types TABLE([Type] nvarchar(256))
       IF @Type='I' 
       BEGIN
         INSERT INTO @Types
         SELECT 'U' 
       END ELSE 
       IF @Type='FN'
       BEGIN
         INSERT INTO @Types
         SELECT 'FN'
           UNION ALL    
         SELECT 'IF'
           UNION ALL    
         SELECT 'TF'
       END ELSE
       BEGIN
         INSERT INTO @Types
         SELECT @Type
       END  
       
       declare crs_Table cursor local for 
        SELECT o.name,
               o.[type]
        FROM sys.all_objects o, @Types t 
       WHERE o.[type] = t.[Type] COLLATE Chinese_PRC_CI_AS and 
             o.is_ms_shipped = 0 AND 
             o.name like @objname AND
             O.create_date>=@CreateDate
       ORDER BY o.name         
       
       open crs_Table 
       fetch next from crs_Table into @TableName, @newtypename 
       while( @@fetch_status = 0 ) 
       begin 
          IF @Type='I'
          BEGIN
             PRINT 'exec [sp_indexGet] '''+@TableName+''', ''d'', 1'
             print 'go'
             exec [sp_indexGet] @TableName, 'c'        
          END ELSE
          IF @Type='U'
          BEGIN
             exec [sp_ObjectScriptsGet] @newtypename, @TableName, @Scripts output 
             
             set @i = 0 
             while( @i <= len( @Scripts ) / 4000 ) 
             begin
                print substring( @Scripts, @i * 4000 + 1, 4000 ) 
                select @i = @i + 1 
             end
             print 'go'
          END ELSE
          BEGIN
            EXEC sp_TextGet @TableName
          END
          
          fetch next from crs_Table into @TableName, @newtypename 
       end
       close crs_Table 
       deallocate crs_Table
       
       SET NOCOUNT OFF      
    end
    GO
  • 相关阅读:
    Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.
    旋转二维数组
    replace empty char with new string,unsafe method和native implementation的性能比较
    判断一字符串是否可以另一字符串重新排列而成
    移除重复字符的几个算法简单比较
    也来纠结一下字符串翻转
    判断重复字符存在:更有意义一点
    程序员常去网站汇总
    sublime
    针对程序集 'SqlServerTime' 的 ALTER ASSEMBLY 失败,因为程序集 'SqlServerTime' 未获授权(PERMISSION_SET = EXTERNAL_ACCESS)
  • 原文地址:https://www.cnblogs.com/hijushen/p/T-SQL.html
Copyright © 2011-2022 走看看