【发布时间】:2020-05-20 18:56:19
【问题描述】:
我试图展示 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 [查询()]:'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) Sep 24 2019 13:48:23 版权所有 (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 (Build 17763: )
PowerShell 版本:5.1.17763.316
【问题讨论】:
标签: sql-server xquery powershell-4.0