SQL 如果版本允许,用于压缩数据库备份的脚本

SQL Script to compress database backups if version allows it

我目前使用一个非常基本的备份脚本将我的 SQL 数据库备份到给定目录,用 Winrar 压缩。

我希望在 Winrar 之前使用 SQL 压缩命令(目前已注释掉)如果 SQL 脚本所使用的版本是 SQL 标准或更高。

这是我当前的脚本:

Declare @backupPath nvarchar(1000);
set @backupPath = 'C:\Backups\Auto\';
Declare @fileName nvarchar(100);
Declare @currentDate datetime
Declare @fullPath nvarchar(1000);
Declare @databaseName nvarchar(100);

set @databaseName = 'Database_name';

-- Do not change these values
set @currentDate = GETDATE();
set @fileName = @databaseName + '_' +                  REPLACE(REPLACE(REPLACE((CONVERT(nvarchar(24), GETDATE(), 120)), ':', ''),' ', ''),'-', '') + '.bak'
set @fullPath = @backupPath + @fileName;
print 'adding device ' + @fileName
EXEC sp_addumpdevice 'disk', @fileName, @fullPath;
BACKUP database @databaseName to @fileName --WITH COMPRESSION
print 'dropping device ' + @fileName
EXEC sp_dropdevice @fileName

我希望脚本检查 version/edition,然后如果 Version/Edition 是标准或更高,则 运行 WITH COMPRESSION 命令。

没有检查任何东西。如果支持压缩compress,如果不支持则报错然后正常备份。

BEGIN TRY
    BACKUP DATABASE @databaseName TO DISK = @filename WITH COMPRESSION;
END TRY
BEGIN CATCH
    BACKUP DATABASE @databaseName TO DISK = @filename;
END CATCH

这可能不完整,但我想你会明白要点:

DECLARE @databaseName nvarchar(100)
DECLARE @fileName nvarchar(100)
DECLARE @serverEdition int;
DECLARE @useCompression bit;

SELECT @serverEdition = Cast(SERVERPROPERTY('EditionID') as int);
-- Reference: 
IF @serverEdition IN    (
                            1804890536,     -- Enterprise
                            610778273,      -- Enterprise Eval
                            -1534726760     -- Standard
                        )    
BEGIN
    useCompression = 1; -- Supports compression
END

if @useCompression
BEGIN
    BACKUP database @databaseName to @fileName WITH COMPRESSION;
END
ELSE
BEGIN
    BACKUP database @databaseName to @fileName;
END
IF (CASE WHEN   CAST(SERVERPROPERTY('Edition') AS VARCHAR(100)) LIKE '%Enterprise%' THEN 1 ELSE 0 END 
   + CASE WHEN SERVERPROPERTY('EngineEdition') = 3 THEN 1 ELSE 0 END = 2)
    BEGIN
      BACKUP database @databaseName to @fileName WITH COMPRESSION 
    END
ELSE 
   BEGIN
      BACKUP database @databaseName to @fileName
   END