2013-02-21 26 views
0

我已經開始嘗試使用SQL Server 2012功能LocalDb。我正在爲SMO創建一些PowerShell腳本,比如創建數據庫。要做到這一點,我有這樣的功能:LocalDb和SMO - 如何選擇放置數據庫文件的位置?

Function New-Database { 
    Param(
     $server, 
     $databaseName 
    ) 
    $serverHandle = New-Object Microsoft.SqlServer.Management.Smo.Server($server) 
    if($serverHandle.Databases.Name.Contains($databaseName)) { 
     throw "Database $databaseName already exists" 
    } 

    $databaseHandle = New-Object Microsoft.SqlServer.Management.Smo.Database($serverHandle, $databaseName) 
    $databaseHandle.Create() 
} 

使用的LocalDB,中密度纖維板和LDF文件在C:\Users\<username>\創建。我想覆蓋這個,但我沒有找到如何。 $databaseHandle對象有一個屬性PrimaryFilePath,但它是隻讀的。看來喜歡的事,應該是死簡單的事,但我就是無法找出如何...

解決方案 通過下面的答案的帶領下,這裏PowerShell的要求,我需要:

$fileGroup = New-Object Microsoft.SqlServer.Management.Smo.FileGroup($databaseHandle, "PRIMARY") 
    $dataFile = New-Object Microsoft.SqlServer.Management.Smo.DataFile($fileGroup, "DataFile", $filePath) 
    $fileGroup.Files.Add($dataFile) 
    $databaseHandle.FileGroups.Add($fileGroup) 
+0

http://blogs.msdn.com/b/sqlexpress/archive/2011/10/28/localdb-where-is-my-database.aspx – 2013-02-21 09:27:17

+0

@ DavidBrabant:嗯,是的,它告訴我如何在SQL Management Studio中執行此操作,或者通過SQL調用來執行此操作。但在這種情況下,我不能做任何事情,我只能忍受SMO。 – carlpett 2013-02-21 09:31:13

回答

1

我認爲this thread from the SMO Forum包含答案。您只需將其轉換爲SQL PowerShell語法(我相信這只是SMO的包裝器)。

這裏的VBScript的片段:

databaseHandle.FileGroups.Add(New FileGroup(db, "PRIMARY")) 
databaseHandle.FileGroups(0).Files.Add(
    New DataFile(db.FileGroups(0), "TestName", "D:\SqlBancos\Teste\Teste1.mdf")) 
+0

謝謝!爲了完整起見,我添加了上面的powershell語法。 – carlpett 2013-02-22 13:31:33

+0

謝謝,很高興看到完整的答案! – 2013-02-24 23:27:37