Sql-Server-2005

PowerShell 獲取數據庫架構

  • May 14, 2020

我可以使用 PowerShell 連接到具有實例名稱的遠端 SQL Server。我正在使用一個包含我所有數據庫詳細資訊的 XML 文件(類似於配置文件)。PowerShell 使用它來建立連接。

現在,我想獲取與該 XML 文件中已定義的特定數據庫關聯的所有“模式”。如何使用 Powershell 腳本實現這一目標?

任何幫助將非常感激。

假設您有一個Server定義為 $ServerObject 的 SMO 對象的有效實例。以下程式碼將允許您提取數據庫中所有模式的名稱UserDatabase01

$Database = $ServerObject.Databases | ? { $_.Name -eq "UserDatabase01" }
$Database.Schemas | Select Name

有關可通過 SMO 獲得的架構屬性的更多資訊,請參閱Schema類的文件。不幸的是,SQL 2005 的 SMO 版本缺少該類的許多屬性。較新的版本向後兼容,您可能需要考慮安裝較新的版本:

您可以使用此腳本將數據庫提取為.dacpac 文件,可在 Visual Studio 中使用它來轉換為完整的數據庫架構。

#extract all your database schemas as dacpacs
$server = 'PICARD'

$dbs = Invoke-Sqlcmd -ServerInstance $server -Database tempdb -Query 'SELECT name FROM sys.databases WHERE database_id >4'

foreach($db in $dbs.name){
$cmd = "& 'C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\sqlpackage.exe' /action:Extract /targetfile:'C:\dacpacs\$db.dacpac' /SourceServerName:$server /SourceDatabaseName:$db"

Invoke-Expression $cmd
}

我們在我的環境中使用它來每天提取我們的模式。前往我的部落格查看有關此技術的完整文章

引用自:https://dba.stackexchange.com/questions/45135