11

SQLスクリプトを実行してデータベースを作成するpowershellスクリプトを実行する必要があります。私の知識に基づいて、次の方法でpowershellコマンドを実行します。

初期化.ps1

$DATABASEFILENAME = "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008INSTANCE\MSSQL\DATA\myDB.mdf"
$DATABASELOGNAME = "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008INSTANCE\MSSQL\DATA\myDB_log.ldf"
$DBUSEROWNER = "domain\spsetup"

CreateDatabase.ps1

 try {
        $createDatabaseScript = ($scriptsFolder,$eachRelease,$DeployEnvironment,"Config" -join "\") + "\JM SiteRequest Database.sql"
        $sqlVariable = "DATABASEFILENAME = '$DATABASEFILENAME'", "DATABASELOGNAME = '$DATABASELOGNAME'", "DBUSEROWNER = '$DBUSEROWNER'"

        Invoke-Sqlcmd -ServerInstance "$MySQLServer" -InputFile "$createDatabaseScript" -ErrorAction Stop -Variable $sqlVariable
}
catch [Exception] {
        Write-Error "Database error: $_.Exception"
}

SQL スクリプト

CREATE DATABASE [SiteRequestDB] ON  PRIMARY
( NAME = N'SiteRequestDB', FILENAME = N'$(DATABASEFILENAME)' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON 
( NAME = N'SiteRequestDB_log', FILENAME = N'$(DATABASELOGNAME)' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

@Chad Millerが提案したように、 $sqlVariable を更新しました。だから問題はそこにあった。今、私はこのエラーを受け取りました: データベース エラーの作成: データベース エラー: オブジェクトまたは列名が見つからないか空です。SELECT INTO ステートメントの場合、各列に名前があることを確認します。他のステートメントについては、空のエイリアス名を探します。"" または [] として定義されたエイリアスは使用できません。別名を有効な名前に変更してください。ラベル 'C' は既に宣言されています。ラベル名は、クエリ バッチまたはストアド プロシージャ内で一意である必要があります..Exception.Exception

4

2 に答える 2

11

コマンドレットのVariableパラメーターInvoke-Sqlcmdはうるさいです。変数の割り当ての前後にスペースを入れないでください。

$sqlVariable = "DATABASEFILENAME='$DATABASEFILENAME'", "DATABASELOGNAME='$DATABASELOGNAME'", "DBUSEROWNER='$DBUSEROWNER'"

また、変数から一重引用符を削除する必要があります。

$sqlVariable = "DATABASEFILENAME=$DATABASEFILENAME", "DATABASELOGNAME=$DATABASELOGNAME", "DBUSEROWNER=$DBUSEROWNER"
于 2013-05-20T19:21:03.890 に答える
0

まず、エラーメッセージがある場合はそれを指定します。

また、ログとデータ ファイルの場所を定義する必要はありません。以下のスニペットを使用してみてください。多くのプロジェクトで機能します。

$sqlServerName = "%your SQL server instance%" #for example, ".\SQLEXPRESS"
$file = "C:\yourScript.sql"
$database = "testDatabaseName"

$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $sqlServerName
Invoke-SqlCmd -inputfile $file -serverinstance $server -database $database
于 2013-05-20T18:45:26.060 に答える