Sql-Server-2005
PowerShell 獲取數據庫架構
我可以使用 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 }
我們在我的環境中使用它來每天提取我們的模式。前往我的部落格查看有關此技術的完整文章。