backup database stored procedure

  • I am trying to modify a script that to back databsae in t-sql.

    I put it in a stored procedure with one paramenter dbname.

    I would like if a dbname is passed when calling the sproc, it will only backup this database, if no paramenter is entered, the dbname is null, then backup all user databases- no system databases.

    But I have difficulty to define this two situations in code.

    Below is the sproc:

    CREATE PROCEDURE [dbo].[BackupDB]

    @dbname varchar(50)

    AS

    BEGIN

    SET NOCOUNT ON;

    DECLARE @name VARCHAR(50) -- database name

    DECLARE @path VARCHAR(256) -- path for backup files

    DECLARE @fileName VARCHAR(256) -- filename for backup

    DECLARE @fileDate VARCHAR(20) -- used for file name

    -- specify database backup directory

    SET @path = 'G:\Backup\'

    -- specify filename format

    --SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) only date if also time use below

    -- specify filename format

    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')

    DECLARE db_cursor CURSOR FOR

    SELECT name

    FROM master.dbo.sysdatabases

    WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases

    AND name = @dbname

    OPEN db_cursor

    FETCH NEXT FROM db_cursor INTO @name

    WHILE @@FETCH_STATUS = 0

    BEGIN

    SET @fileName = @path + @name +'\'+@name + '_' + @fileDate + '.BAK'

    BACKUP DATABASE @name TO DISK = @fileName

    FETCH NEXT FROM db_cursor INTO @name

    END

    CLOSE db_cursor

    DEALLOCATE db_cursor

    END

  • I found a solution using

    AND name =ISNULL(@dbname, name)

    that seems working fine.

Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply