我正在使用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: ExecuteNonQuery數據庫'Salesforce-Neptune'失敗。---> 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
文件並將整個查詢放在一行上,那麼我的PowerShell腳本就可以工作。什麼是dealio?
啊!這正是問題所在。這就說得通了。謝謝你的幫助。 –