Создать сценарий заполнения данных с помощью PowerShell и SSMS - PullRequest
0 голосов
/ 11 февраля 2019

Здесь Я нашел решение для ручного создания сценария заполнения данных.Ручное решение позволяет мне выбрать, для каких таблиц я хочу сгенерировать вставки

Я хотел бы знать, есть ли возможность запустить тот же процесс через PowerShell?

До сих пор мне удалось, как создать сценарий SQL, который создает базу данных schema seeder:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null 

$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') "(localdb)\mssqlLocalDb"  

$dbs=$s.Databases 

#$dbs["HdaRoot"].Script() 
$dbs["HdaRoot"].Script() | Out-File C:\sql-seeding\HdaRoot.sql  

#Generate script for all tables

foreach ($tables in $dbs["HdaRoot"].Tables) 
{
    $tables.Script() + "`r GO `r " | out-File C:\sql-seeding\HdaRoot.sql  -Append
} 

, однако существует ли аналогичный способ генерирования данных сценарий посева?

Есть идеи?Приветствия

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать класс сценариев SMO .Это позволит вам создавать сценарии для таблиц, а также INSERT операторов для данных в таблицах.

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

В Scripter доступно множество опций, поэтому в этом примере я сделал лишь несколько примеров - для этой задачи важен Options.ScriptData.Без него вы просто получите скрипты схемы, которые вы уже получаете.

В конце метод EnumScript выполняет фактическую работу по генерации скриптов, выводу и добавлению скрипта в файл, указанный вварианты.

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null 

## target file
$outfile = 'f:\scriptOutput.sql' 

## target server
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') "localhost"  

## target database
$db = $s.databases['tempdb'] 

## array of tables that we want to check
$tables = @('Client','mytable','tablesHolding')

## new Scripter object
$tableScripter = new-object ('Microsoft.SqlServer.Management.Smo.Scripter')($s) 

##define options for the scripter
$tableScripter.Options.AppendToFile = $True
$tableScripter.Options.AllowSystemObjects = $False
$tableScripter.Options.ClusteredIndexes = $True
$tableScripter.Options.Indexes = $True
$tableScripter.Options.ScriptData = $True
$tableScripter.Options.ToFileOnly = $True
$tableScripter.Options.filename = $outfile

## build out the script for each table we defined earlier
foreach ($table in $tables) 
{
    $tableScripter.enumscript(@($db.tables[$table])) #enumscript expects an array. this is ugly, but it gives it what it wants.
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...