Published on

October 5, 2025

Управление и архивирование скриптов SQL Server

Как администратор SQL Server или консультант, вы часто сталкиваетесь с большим количеством скриптов для различных задач. Эти скрипты могут быть разбросаны по разным компьютерам и папкам, что затрудняет их управление и поиск в нужный момент. В этой статье мы рассмотрим простой и эффективный способ архивирования и управления скриптами SQL Server с использованием центральной базы данных-репозитория.

Решение: Создание репозитория скриптов

Один из эффективных способов – создать репозиторий скриптов с использованием базы данных SQL Server. Текстовые скрипты, такие как T-SQL, пакеты, PowerShell и VBScript, могут быть легко сохранены в обычной таблице SQL Server с столбцом varchar(max). Это позволяет легко создавать резервные копии, переносить и эффективно искать скрипты.

Вот логика решения:

  1. Используйте команду get-childitem PowerShell для рекурсивного сканирования папки с интересующими вас файлами скриптов.
  2. Прочитайте содержимое файла с помощью get-content и вставьте содержимое, вместе с другой собранной информацией, в предопределенную таблицу базы данных.

Давайте посмотрим на код:

if object_id('dbo.ScriptRepository', 'U') is not null
    drop table dbo.ScriptRepository;

create table dbo.ScriptRepository (
  id int identity primary key,
  Folder varchar(300),
  [FileName] varchar(300),
  Script varchar(max),
  LogDate DateTime default Current_Timestamp
);

Затем мы можем использовать скрипт PowerShell для архивирования файлов:

#requires -version 3.0;
$folder ='c:\DBAdmin\'; #измените на свою папку
[string[]]$include ="*.sql", "*.ps1"; # вы можете добавить другие типы файлов

#create a System.DataTable object for the file uploading
$dt = New-Object System.Data.DataTable;

$dc = New-Object System.Data.DataColumn('Folder', [System.String]);
$dt.Columns.Add($dc);

$dc = New-Object System.Data.DataColumn('FileName', [System.String]);
$dt.Columns.Add($dc);

$dc = New-Object System.Data.DataColumn('Script', [System.String]);
$dt.Columns.Add($dc);

dir -LiteralPath $folder -Include $include -File -Recurse | 
foreach {
    $dr = $dt.NewRow();
    $dr.Folder = $_.Directory;
    $dr.FileName = $_.name;
    $dr.Script = (gc -path $_.FullName -raw);
    $dt.Rows.Add($dr);
}

Save-DataTable -SQLInstance tp_w520 -DestinationDB mssqltips -DestinationTable 'dbo.ScriptRepository' -SourceData $dt `
-ColumnMapping @{Folder='Folder'; FileName='FileName'; Script='Script'; }

Извлечение скриптов из репозитория

Когда вам нужно извлечь конкретный скрипт из репозитория на локальный диск, вы можете сделать это, следуя этим шагам:

  1. Определите запрос для извлечения интересующего вас скрипта(ов).
  2. Определите папку назначения, в которую вы хотите сохранить скрипт(ы).
  3. Запустите скрипт PowerShell.

Вот пример:

Import-Module sqlps -DisableNameChecking; #это применимо только к версиям SQL Server 2012+
set-location c:
[string]$destPath = 'c:\temp\'; # измените на свою папку назначения
[string]$qry = "select filename, script from dbo.ScriptRepository where id in (1, 3)"; # измените запрос по своим потребностям
$db = get-item sqlserver:\sql\tp_w520\default\databases\mssqltips #измените tp_w520\default на свой собственный экземпляр SQL Server
$ds = $db.ExecuteWithResults($qry);
$ds.tables[0].rows | % { $_.script | out-file -FilePath "$destPath\$($_.filename)" -Force}

Резюме

Создавая репозиторий скриптов в базе данных SQL Server, вы можете легко архивировать и управлять своими скриптами SQL Server. Это решение позволяет легко создавать резервные копии, переносить и эффективно искать скрипты. Оно особенно полезно в командной среде, где все члены команды могут загружать свои скрипты в центральный репозиторий, вместо использования общих папок хранения или SharePoint.

Важно отметить, что если длина полного имени файла превышает 260 символов, возможно, возникнет ошибка. В таких случаях вам потребуется сократить имя файла или имя каталога, чтобы соответствовать ограничению на количество символов.

С помощью этого простого и эффективного решения вы можете быть уверены, что ваши скрипты организованы, легко доступны и могут быть найдены в нужный момент.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.