等效于数据库的 Powershell 脚本 -> 生成脚本



我编写了一个PowerShell脚本,它将模式和数据信息存储在.sql文件中。但是在那个文件中,我漏掉了create database的初始化部分。文件以查询create table开头

PowerShell脚本:

$Filepath= 'C:Temp' # local directory to save build-scripts to
$DataSource= 'ServerName' #'SERVERNAME' # server name and instance
$Database= 'DBName'
$DateTime = Get-Date -Format s
$dateStamp = $(get-date).ToString("yyyyMMdd");
$ErrorActionPreference = "stop"
$ms='Microsoft.SqlServer'
$v = [System.Reflection.Assembly]::LoadWithPartialName( "$ms.SMO")
if ((($v.FullName.Split(','))[1].Split('='))[1].Split('.')[0] -ne '9') {
[System.Reflection.Assembly]::LoadWithPartialName("$ms.SMOExtended") | out-null
}
$My="$ms.Management.Smo" #
$s = new-object ("$My.Server") $DataSource
if ($s.Version -eq  $null ){Throw "Can't find the instance $Datasource"}
$db= $s.Databases[$Database] 
if ($db.name -ne $Database){Throw "Can't find the database '$Database' in $Datasource"};
$transfer = new-object ("$My.Transfer") $db
$transfer.Options.ScriptBatchTerminator = $true
$transfer.Options.ToFileOnly = $true
$transfer.Options.ScriptData = $true
$transfer.Options.IncludeHeaders = $true
$transfer.Options.ExtendedProperties = $true
$transfer.Options.IncludeDatabaseContext = $true
$transfer.Options.DriForeignKeys = $true
$transfer.Options.DriIndexes = $true
$transfer.Options.DriPrimaryKey = $true
$transfer.Options.DriUniqueKeys = $true
$transfer.CreateTargetDatabase = $true
$transfer.Options.Filename = "$($FilePath)$($Database)_$($dateStamp)_Build.sql"; 
$transfer.EnumScriptTransfer()

关于如何实现这一点有什么帮助吗?基本上我在我的.sql文件中缺少create database块。

据我所知,您需要添加额外的行来编写数据库信息,而不是对象。

我想,根据你的脚本,它应该是这样的:

$db.Script() | Out-File 'c:tempdatabase.sql'

根据需要更改路径和文件名

最新更新