调用ExecuteScalar的SQL异常:“ XQuery [query()]:'in'附近的语法错误,预期为'}'。”

问题描述 投票:0回答:1

我正在尝试展示Microsoft软件(即SQL Server)如何运行XQuery,类似于我使用SAXON所做的事情。

从SSMS,我可以成功运行此查询。我将整个OpenRowSet填充到Select中,因此可以使用PowerShell或C#中的.ExecuteScalar方法运行。

SELECT Cast((SELECT BulkColumn FROM   OPENROWSET(BULK'c:\XMLClass\Shakespeare\Hamlet\hamlet.xml',SINGLE_CLOB) as myalias) as XML).query(
'
 <html><body>
 {
   for $act in //ACT
   return $act 
 }
 </body></html>
 ') 

接下来,我想在PowerShell中运行相同的命令,捕获结果,然后将其写入文件:

$datasource = "server=(local);database=master;trusted_connection=true"

$connection = New-Object System.Data.SQLClient.SQLConnection($connectionString)
$connection.open()
Write-Host "SQL Connection Opened" 

$SQLScalarCommand = @"

SELECT Cast((SELECT BulkColumn FROM   OPENROWSET(BULK'c:\XMLClass\Shakespeare\Hamlet\hamlet.xml',SINGLE_CLOB) as myalias) as XML).query(
'
 <html><body>
 {
   for $act in //ACT
   return $act 
 }
 </body></html>
 ') 

"@

#Write-Host $SQLScalarCommand 

$Command = New-Object System.Data.SQLClient.SQLCommand 
$Command.Connection = $connection 
$Command.CommandText = $SQLScalarCommand 

$SQLResult = $Command.ExecuteScalar().ToString()
Write-Host ("Result=$SQLResult") 

$connection.close()  

从PowerShell获取报告的SQL命令:

使用“ 0”参数调用“ ExecuteScalar”的异常:“ XQuery[query()]:“ in”附近的语法错误,预期为“}”。”C:\ XMLClass \ XQuery \ Shakespeare_Powershell_SQL_Simpler.ps1:43 char:1

我看到了这个post,但似乎不适用于我的情况。我的Xquery做得更多,但是为了说明起见,我尝试将其简化为一个“ for / in”语句。

选择@@ Version显示此:

Microsoft SQL Server 2019(RTM)-15.0.2000.5(X64)2019年9月24日13:48:23版权所有(C)Windows Server 2019 Standard 10.0(Build 17763:)上的Microsoft Corporation开发人员版(64位)] >

PowerShell版本:5.1.17763.316

我正在尝试展示Microsoft软件(即SQL Server)如何运行XQuery,类似于我使用SAXON所做的事情。从SSMS,我可以成功运行此查询。我塞满了整个...

sql-server xquery powershell-4.0
1个回答
1
投票

Powershell字符串插值将$act替换为powershell变量。在Powershell中,双引号字符串和here-strings执行变量字符串插值,而单引号字符串和here-strings不执行。参见about_Quoting_Rules: HERE-STRINGS

© www.soinside.com 2019 - 2024. All rights reserved.