【发布时间】:2017-09-07 10:24:51
【问题描述】:
我正在使用 Microsoft.SqlServer.Management.SMO 程序集在 PowerShell 中自动执行一些数据库任务。由于某种原因,使用换行符执行查询似乎不起作用。但是,我还在 C# 中复制了完全相同的任务,并且确实有效。我不确定是否存在我一直忽略的细微差异,或者在 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: 'select' 附近的语法不正确。
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?
【问题讨论】:
标签: c# sql-server powershell