SQL 联接查询在 PowerShell 中不起作用

Posted

技术标签:

【中文标题】SQL 联接查询在 PowerShell 中不起作用【英文标题】:SQL Join Query doesn't work in PowerShell 【发布时间】:2018-03-22 04:47:56 【问题描述】:

我正在尝试将 Python 脚本转换为 PS 脚本。该脚本读取访问数据库文件并运行简单查询以将结果发送到 CSV 文件。从 Python 和直接从 MS Access 执行查询都没有问题。

查询:

SELECT
  TABLEA.SITE_CODE,
  TABLEB.REG_TITLE,
  TABLEC.G_ORG_TITLE,
  TABLED.BRD_TITLE,
  TABLEA.SITE_TYPE
FROM ((TABLEA
  LEFT JOIN [TABLEC] ON TABLEA.[G_ORG_ID] = TABLEC.[ID])
  LEFT JOIN TABLEB ON TABLEA.[REGION_ID] = TABLEB.[ID])
  LEFT JOIN TABLED ON TABLEA.[BRAND_ID] = TABLED.[ID]
ORDER BY TABLEA.SITE_CODE

这是我正在使用的代码:

$path = "\Path\to\File.mdb"
$QuerySites = "SELECT TABLEA.SITE_CODE, TABLEB.REG_TITLE, TABLEC.G_ORG_TITLE, TABLED.BRD_TITLE, TABLEA.SITE_TYPE FROM ((TABLEA LEFT JOIN [TABLEC] ON TABLEA.[G_ORG_ID] = TABLEC.[ID]) LEFT JOIN TABLEB ON TABLEA.[REGION_ID] = TABLEB.[ID]) LEFT JOIN TABLED ON TABLEA.[BRAND_ID] = TABLED.[ID] ORDER BY TABLEA.SITE_CODE"

$csv = "C:\path\Outfile.csv"
$connection = New-Object -TypeName System.Data.OleDb.OleDbConnection
$connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= $path"

$delimiter = ','

$command2 = $connection.CreateCommand()
$command2.CommandText = $QuerySites
$adapter2 = New-Object -TypeName System.Data.OleDb.OleDbDataAdapter $command2
$dataset2 = New-Object -TypeName System.Data.DataSet
$adapter2.Fill($dataset2)




$connection.Close()

我收到以下错误:

Exception calling "Fill" with "1" argument(s): "IErrorInfo.GetDescription failed with E_FAIL(0x80004005)."
At line:14 char:1
+ $adapter2.Fill($dataset2)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : OleDbException

正如我所说,查询在 Python 脚本中运行并且直接从 Access 运行没有问题。

我还没有找到可以引导我找到根本原因的资源。

【问题讨论】:

【参考方案1】:

将所有表格和字段名称括在括号中以确保关键字安全。

SELECT
    [TABLEA].[SITE_CODE],
    [TABLEB].[REG_TITLE],
    [TABLEC].[G_ORG_TITLE],
    [TABLED].[BRD_TITLE],
    [TABLEA].[SITE_TYPE]
FROM (([TABLEA]
    LEFT JOIN [TABLEC] ON [TABLEA].[G_ORG_ID] = [TABLEC].[ID])
    LEFT JOIN [TABLEB] ON [TABLEA].[REGION_ID] = [TABLEB].[ID])
    LEFT JOIN [TABLED] ON [TABLEA].[BRAND_ID] = [TABLED].[ID]
ORDER BY [TABLEA].[SITE_CODE]

【讨论】:

欢迎来到 SO!虽然这可能是一个很好的一般做法,但我看不到任何特殊字符或关键字可以用括号解决。

以上是关于SQL 联接查询在 PowerShell 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

sqldataadapter 在 powershell 中不起作用

内部联接在 Slick 中不起作用

内部联接在使用 Spark 2.1 的 DataFrame 中不起作用

为啥这个 T-SQL 查询在 Synapse 中不起作用?

SQL查询在while循环中不起作用 - JAVA

SQL 查询在最新版本的 MySQL 中不起作用