2016-05-26 8 views
1

Powershellを使いこなすことをゆっくりと学んでいて、初心者でも簡単にしてください。私は、いくつかのExcelファイルから挿入ステートメントを生成し、それを個々のテキストファイルに保存するPowershellスクリプトを作成しました。 Powershellを使ってSQL Server上のテキストファイルを実行するにはどうすればよいですか?Powershell:SQL Server上で複数のtxtファイルを実行するには

+0

powershellは必要ですか? Windowsのコマンドラインから簡単に達成できます。 – qxg

+0

はい@DaveSexton –

答えて

0

あなたのご意見は本当に非常に役に立ちました。私は混乱を避けるために、私は

#Get list of files 
$Files = Get-ChildItem 'C:\Users\Me\Documents\Test\*.txt' 


try { 
    $Filename = $File.BaseName 

    foreach ($file in $files) { 

    Invoke-sqlcmd -ServerInstance "ServerName" -Database "Test" -InputFile $file -ErrorAction Stop 
    Write-Host -ForegroundColor Green "EXECUTED SuCCESSFULLY: " $filename 
    Move-Item $File "C:\Users\Me\Documents\Test\Executed" 
} 
} 
catch { 
Write-Host -ForegroundColor RED "FAILED TO EXECUTE: " $filename 
} 

@ShawnMeltonあなたの由来この方法を利用した私のTXTファイルにGOステートメントを持っていないので、私は別々のフォルダにファイルを実行し、すべて正常に転送しました。したがって、実行されず実行されなかったスクリプトは、すべてメインフォルダに残されます。

1

これは、テキストファイルにあるクエリに基づいています。それらにGOトランザクションターミネータがある場合、.NETクライアントSystem.Data.SqlClientは正しい構文としてそのコマンドを受け入れないため、SMOを使用することに制限されています。厳密にはSSMSの終端文字であり、真のSQL構文ではありません。実際に

私はあなたがこのような何かを行うことができGOを処理するために、クライアントの要求を持っていた:

$dbServer = MyServer 
$ScriptDirectory = 'C:\scripts' 
Import-Module SQLPS 
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server $dbServer 

try { 
$file = dir $ScriptDirectory 
foreach ($f in $file) { 
    $s = Get-Content $f -Raw 
    $srv.ConnectionContext.ExecuteNonQuery($s); 
} 
} 
catch { 
$error[0].Exception 
} 

あなたはGO文で対処しなければならないと.NETを使用しない場合方法you can check out an article published on SQLShack。接続の作成方法と実行方法について説明し、SQL ServerでPSを使用する方法についてもう少し触れます。

関連する問題