C# 带换行符的查询无法在PowerShell中执行
我正在使用Microsoft.SqlServer.Management.SMO程序集自动化PowerShell中的一些数据库任务。出于某种原因,执行带有换行符的查询似乎不起作用。然而,我也在C中复制了完全相同的任务,它确实有效。我不确定是否有我一直忽略的细微差别,或者在PowerShell中读取文件是否有导致我出现问题的奇怪差别。以下是复制所需的所有信息: SQL脚本test.SQL:C# 带换行符的查询无法在PowerShell中执行,c#,sql-server,powershell,C#,Sql Server,Powershell,我正在使用Microsoft.SqlServer.Management.SMO程序集自动化PowerShell中的一些数据库任务。出于某种原因,执行带有换行符的查询似乎不起作用。然而,我也在C中复制了完全相同的任务,它确实有效。我不确定是否有我一直忽略的细微差别,或者在PowerShell中读取文件是否有导致我出现问题的奇怪差别。以下是复制所需的所有信息: SQL脚本test.SQL: select * from INFORMATION_SCHEMA.TABLES PowerShell不工作:
select
* from INFORMATION_SCHEMA.TABLES
PowerShell不工作:
下面是PowerShell提供的错误消息:
使用1个参数调用ExecuteOnQuery时发生异常:
数据库“Salesforce Neptune”的ExecuteOnQuery失败。-->
Microsoft.SqlServer.Management.Smo.FailedOperationException:
数据库“Salesforce Neptune”的ExecuteOnQuery失败。-->
Microsoft.SqlServer.Management.Common.ExecutionFailureException:异常
执行Transact-SQL语句或批处理时发生异常。
-->System.Data.SqlClient.SqlException:“选择”附近的语法不正确
C确实起作用:
如果我编辑test.sql文件并将整个查询放在一行上,那么我的PowerShell脚本可以工作。怎么回事
或者,如果在PowerShell中读取导致我出现问题的文件存在一些奇怪的差异
我相信这是因为Get内容在默认情况下以行数组的形式读取文件,就像C IIRC中的ReadAllLines一样
从V3开始,您可以使用-Raw开关禁用此行为,在V2中,您必须使用[IO.File]::ReadAllTextfile\path。Ah!这正是问题所在。这是有道理的。谢谢你的帮助。
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)
var server = new Server("serverName");
var sql = System.IO.File.ReadAllText(@"D:\code\test.sql");
var database = new Database(server, "myDatabase");
database.ExecuteNonQuery(sql);