• 脚本:数据库创建、备份、强制还原、表数据复制


    1.脚本:通过视图复制数据到表中

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

     

     

    ALTER proc [dbo].[UP_CopyTableFromView]

    (

        @sourceViewName nvarchar(50),

        @newTableName nvarchar(50),

        @copySuccess bit output

    )

    as

    begin

     

        declare @script nvarchar(500);

     

        --判断视图是否存在

        IF  not EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID('[dbo].['+@sourceViewName+']') AND type in (N'V'))

           begin

               set @copySuccess=2;

               return ;

           end

     

        --判断表是否存在

        IF  not EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].['+@newTableName+']') AND type in (N'U'))

           begin

               begin try

     

                  set @script='select * into '+ isnull(@newTableName,'')+' from '+isnull(@sourceViewName,'');

                  print @script;

     

                  begin tran

                      exec (@script);

                  commit tran

     

                  --

                  set @copySuccess=0;

               end try

               begin catch

                  set @copySuccess=1;

               end catch

           end

     

    end

     

    2.脚本:表对表完全数据复制

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

     

     

    ALTER proc [dbo].[UP_CopyTableFromTable]

    (

        @sourceTableName nvarchar(50),

        @newTableName nvarchar(50),

        @copySuccess bit output

    )

    as

    begin

     

        declare @script nvarchar(500);

     

        --判断表是否存在

        IF  not EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].['+@sourceTableName+']') AND type in (N'U'))

           begin

               set @copySuccess=2;

               return ;

           end

     

        --判断表是否存在

        IF  not EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].['+@newTableName+']') AND type in (N'U'))

           begin

               begin try

     

                  set @script='select * into '+ isnull(@newTableName,'')+' from '+isnull(@sourceTableName,'');

                  print @script;

     

                  begin tran

                      exec (@script);

                  commit tran

     

                  --

                  set @copySuccess=0;

               end try

               begin catch

                  set @copySuccess=1;

               end catch

           end

     

    end

     

    3.脚本:Kill某数据库里的所有进程

    可以应用于强制备份与还原,也可以用于1222错误:锁超时。

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

    ALTER Proc [dbo].[Sp_KillAllProcessInDB]

     

    @DbName VarChar(100)

     

    as

    if db_id(@DbName) = Null

    begin

    Print 'DataBase dose not Exist'

    end

    else

     

    Begin

    Declare @spId Varchar(30)

     

    DECLARE TmpCursor CURSOR FOR

    Select 'Kill ' + convert(Varchar, spid) as spId

    from master..SysProcesses

    where db_Name(dbID) = @DbName

    and spId <> @@SpId

    and dbID <> 0

    OPEN TmpCursor

     

    FETCH NEXT FROM TmpCursor

    INTO @spId

     

    WHILE @@FETCH_STATUS = 0

     

    BEGIN

     

    Exec (@spId)

     

    FETCH NEXT FROM TmpCursor

    INTO @spId

     

    END

     

     

    CLOSE TmpCursor

    DEALLOCATE TmpCursor

     

    end

     

     

    4.脚本:创建数据库

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

     

    ALTER PROCEDURE [dbo].[UP_CreateDatabase]

    (

        @newDatabaseName nvarchar(50),

        @createSuccess bit output

    )

    as

    begin

        declare @script nvarchar(1000)

    --  declare @year nvarchar(50)

        declare @databaseName nvarchar(50)

    --  set @year=DATEPART(year,GETDATE());

        set @databaseName=@newDatabaseName

    --如果数据库已存在

        if exists (select 1 from sys.sysdatabases where name=@databaseName)

           begin

               return;

           end

     

        set @script=' ';

        set @script=@script+' CREATE DATABASE ['+@databaseName+'] ON  PRIMARY ';

        set @script=@script+' ( NAME = '''+@databaseName+''', '

        set @script=@script+'  FILENAME = '+'''C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\DATA\'+@databaseName+'.mdf'''+' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )'

        set @script=@script+'  LOG ON '

        set @script=@script+' ( NAME = '''+@databaseName+'_log'', FILENAME = '+'''C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\DATA\'+@databaseName+'_log.ldf'''+' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'

        set @script=@script+' COLLATE Chinese_PRC_CI_AS'

    --  set @script=@script+  char(13)+char(10)+ ' GO '+char(13)+char(10);

    --  set @script=@script+' EXEC dbo.sp_dbcmptlevel @dbname='''+@databaseName+''', @new_cmptlevel=90'

    --  set @script=@script+  char(13)+char(10)+ ' GO '+char(13)+char(10);

        set @script=@script+' IF (1 = FULLTEXTSERVICEPROPERTY('+'''IsFullTextInstalled'''+'))'

        set @script=@script+' begin'

        set @script=@script+' EXEC ['+@databaseName+'].[dbo].[sp_fulltext_database] @action ='+ '''disable'''

        set @script=@script+' end'

     

        exec (@script)

        print @script

     

        SET   @createSuccess   =0  

        if   @@error<>0    

          begin   

           SET   @createSuccess   =1  

          end

    end

     

     

     

    5.脚本:备份数据库

     

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

     

     

    ALTER   PROCEDURE   [dbo].[UP_BackupDatabase]  

    (  

        @sourceDatabaseName   nvarchar(50),    

        @BackupDisk   nvarchar(500),    

        @BackupName   nvarchar(50),    

        @backupSuccess   bit   OUTPUT    

    )  

    AS  

    BEGIN    

    Declare   @bakstr   varchar(300)  

    declare    @strPath nvarchar(200)

    set @strPath=@BackupDisk+@BackupName;

    set   @bakstr='BACKUP DATABASE '+ @sourceDatabaseName+' TO disk='+''''+ @strPath +''''

     

    exec(@bakstr)  

    print   @bakstr  

     

    SET   @backupSuccess   =0  

    if   @@error<>0    

      begin  

        SET   @backupSuccess   =1  

      end  

    end  

     

     

    6.脚本:还原数据库

     

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    GO

     

     

    ALTER proc [dbo].[UP_RestoreDatabase]

    (

        @sourcePath nvarchar(100),

        @sourceDatabaseName nvarchar(50),

        @restoreDatabaseName nvarchar(50),

        @restoreSuccess bit output

    )

    as

    begin

        --从源数据库的.bak文件中读出源数据库的逻辑名

        declare @dLogicalName nvarchar(50);--源数据库.mdf逻辑名

        declare @lLogicalName nvarchar(50);--源数据库.ldf逻辑名

        set @dLogicalName='';

        set @lLogicalName='';

        --还原数据库的物理文件名

        declare @dFileName nvarchar(100);--要还原的数据库的.mdf物理文件名

        declare @lFileName nvarchar(100);--要还原的数据库的.ldf物理文件名

        set @dFileName='';

        set @lFileName='';

     

        begin try

           --得到逻辑文件名

           declare @sourceScriptD nvarchar(500);

           declare @sourceScriptL nvarchar(500);

           set @sourceScriptD=' select  @dLogicalName=name  from '+isnull(@sourceDatabaseName,'')+'.sys.database_files where  type=0;'

           set @sourceScriptL=' select  @lLogicalName=name  from '+isnull(@sourceDatabaseName,'')+'.sys.database_files where  type=1;'

          

           print @sourceScriptL;

     

           exec sp_executesql @sourceScriptD,N'@dLogicalName nvarchar(50) output',@dLogicalName output

           exec sp_executesql @sourceScriptL,N'@lLogicalName nvarchar(50) output',@lLogicalName output

       

           --得到物理文件名

           declare @restoreScriptD nvarchar(1000);

           declare @restoreScriptL nvarchar(1000);

           set @restoreScriptD=' select  @dFileName=physical_name  from '+isnull(@restoreDatabaseName,'')+'.sys.database_files where  type=0;'

           set @restoreScriptL=' select  @lFileName=physical_name  from '+isnull(@restoreDatabaseName,'')+'.sys.database_files where  type=1;'

     

           print @restoreScriptL;

     

           exec sp_executesql @restoreScriptD,N'@dFileName nvarchar(100) output',@dFileName output

           exec sp_executesql @restoreScriptL,N'@lFileName nvarchar(100) output',@lFileName output

     

           print '1'+@dFileName

           print '2'+@lFileName

          

           --还原数据库

           declare @script nvarchar(1000);

           set @script= 'RESTORE   DATABASE ' + isnull(@restoreDatabaseName,'') +

                       ' FROM   DISK   = ' + ''''+isnull(@sourcePath,'')+'''' +

                       ' WITH   MOVE   '+ ''''+ @dLogicalName +''''+' TO '+''''+@dFileName+''''+',

                               MOVE   '+ ''''+ @lLogicalName +''''+' TO '+''''+@lFileName+''''+' ,replace';

           --执行

           exec (@script);

           print @script;

          

           --

           set @restoreSuccess=0;

        end try

     

        begin catch

           set @restoreSuccess=1;

          

        end catch

       

    end

  • 相关阅读:
    1041 考试座位号
    1040 有几个PAT
    1039 到底买不买
    1038 统计同成绩学生
    1037 在霍格沃茨找零钱
    1036 跟奥巴马一起编程
    1035 插入与归并
    vue-router--路由传参
    vue-router--路由原理
    vuex--在computed中使用
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1431918.html
Copyright © 2020-2023  润新知