Microsoft.SqlServer.Management.SMOアセンブリを使用して、PowerShellのデータベースタスクを自動化しています。何らかの理由で、改行でクエリを実行しても動作しないようです。しかし、私もC#で全く同じタスクを再現しましたが、うまくいきます。私が見落としてきた微妙な違いがあるのか、PowerShellで問題を引き起こしているファイルを読んでいるときに奇妙な違いがあるのかどうかはわかりません。PowerShellで改行を含むクエリが実行されない
SQLスクリプト(test.sql内):
select
* from INFORMATION_SCHEMA.TABLES
のPowerShell(が仕事をしません):
Add-Type -Path 'C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'
$server = New-Object Microsoft.SqlServer.Management.SMO.Server('serverName')
$database = New-Object Microsoft.SqlServer.Management.SMO.Database($server, 'myDatabase')
$setupScript = Get-Content "$PSScriptRoot\scripts\test.sql"
$database.ExecuteNonQuery($setupScript)
ここでエラーメッセージPowerShellがあります以下は再現するために必要なすべての情報があります以下を与えます:
"1"引数で "ExecuteNonQuery"を呼び出す例外: "データベース 'Salesforce-Neptune'のExecuteNonQueryが失敗しました。 "---> Microsoft.SqlServer.Management.Smo.FailedOperationException: データベース 'Salesforce-Neptune'に対してExecuteNonQueryが失敗しました。---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: Transact -SQL文またはバッチ ---> System.Data.SqlClient.SqlException:付近に正しくない構文 '選択'
のC#(が作業を行います):。
var server = new Server("serverName");
var sql = System.IO.File.ReadAllText(@"D:\code\test.sql");
var database = new Database(server, "myDatabase");
database.ExecuteNonQuery(sql);
私が編集している場合私のtest.sql
ファイルを作成し、クエリ全体を1行に入力すると、PowerShellスクリプトが機能します。 dealioは何ですか?
Ah!それがまさに問題の原因です。それは理にかなっている。ご協力いただきありがとうございます。 –