Вы можете использовать класс сценариев 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.
}