2017-02-09 9 views
0

Я хочу создать базу данных LocalDB таким образом, чтобы файлы MDF и LDF оставались в папке выполнения сценария.Есть ли однострочный файл для создания базы данных LocalDB (не экземпляр) в PowerShell?

  • Я знаю, что мы можем легко сделать команду замены с $ оператора в PowerShell, так, если я заявляю, что-то вроде $pwd он будет делать замену с выходом pwd команды.

  • От here, я знаю, что Invoke-SqlCmd не является простым способом делать вещи с помощью экземпляров LocalDB.

  • Я хочу выполнить следующую команду через PowerShell. Как я мог это сделать?

    sqlcmd -S "(localdb)\MSSQLLocalDB" -Q " 
    CREATE DATABASE [Test] ON PRIMARY ( 
         NAME = N'Test', 
         FILENAME = N'<$pwd output here>\Test.mdf' 
    ) 
    LOG ON ( 
         NAME = N'Test_log', 
         FILENAME = N'<$pwd output here>\Test_log.ldf' 
    )" 
    

ответ

1

Это может быть намного больше, чем вы просите, но это решит вашу проблему.

Это спросит вас, хотите ли вы восстановить из шаблона, если нет, тогда он создаст пустую базу данных.

$backupFilePath='' 
$TempDB='' 
$TempDBlog='' 
$DBName='' 
$Logfilepath='' 
$Datafilepath='' 

$confirmation = Read-Host "Do you want to use a DB template? [y/n]" 

If($confirmation.ToUpper().StartsWith("Y")) 
{ 
$dbCommand = "use [master];RESTORE DATABASE [$DBName] " + "FROM DISK = N'$backupFilePath'" + "WITH FILE = 1, NOUNLOAD, STATS = 10, " + "move '$TempDB' to '$Datafilepath" + "\" + "$DBName" + ".mdf', " + "move '$TempDBlog' to '$Logfilepath" + "\" + "$DBName" + ".ldf';" + "alter database [$DBName] modify file (name=N'$TempDB ', newname=N'$DBName" + "_data1');" + "alter database [$DBName] modify file (name=N'$TempDBlog', newname=N'$DBName" + "_log1');" + "alter database [$DBName] set read_committed_snapshot on with rollback immediate;" + "alter database [$DBName] set COMPATIBILITY_LEVEL = 100;" 
} 

else { 
$dbCommand = "use [master];CREATE DATABASE [$DBName] ON " + "(NAME='$DBName" + "_data1', FILENAME='$Datafilepath" + "\" + "$DBName" + "_data1.mdf', SIZE=1GB, MAXSIZE=UNLIMITED, FILEGROWTH=200MB)" + "LOG ON (NAME='$DBName" + "_log1', FILENAME='$Logfilepath" + "\" + "$DBName" + "_log1.ldf', SIZE=1GB, MAXSIZE=UNLIMITED, FILEGROWTH=200MB); " + "alter database [$DBName] set read_committed_snapshot on with rollback immediate;" + "alter database [$DBName] set COMPATIBILITY_LEVEL = 100; " + "set AUTO_CLOSE OFF;" 
} 

Кому-то придется отредактировать это в приятный кодовый разрыв, потому что он не позволяет мне это делать.