SQL 联接在 Powershell 脚本中不起作用。投掷错误

SQL Joins are not working in Powershell Scripts. Throwing Error

我写了一个 SQL 脚本,它通过 ID 提供来自同一个 table 的结果。我需要在 PowerShell 中使用此脚本来提取结果。

它在 SQL 中有效,但在 Powershell 中无效。尝试使用有或没有加入功能。遇到同样的错误。

发现,AS 在 Powershell 命令中无法识别,虽然第二个 Table 没有通过结果。

下面是代码,

$QueryUpdate = "SELECT [Table_1].[SystemName] AS [VName]   
FROM [Table] LEFT OUTER JOIN    
[Table] AS [Table_1] ON [Table].[ParentMachineId] = [Table_1].[id]   
WHERE [Table].[Active] = 1 AND [Table_1].[SystemName] IS NOT NULL
AND [Table].[SystemType] NOT IN(4)"

$cmdUpdate=New-Object system.Data.SqlClient.SqlCommand($QueryUpdate,$conn)
$SystemSelect = $cmdUpdate.ExecuteNonQuery()

尝试从 Powershell 中的查询中删除 [ ],得到的错误是 (.) Invalid Statement or Missing (.)

执行脚本后,我收到错误 列名不明确

Exception calling "ExecuteReader" with "0" argument(s): "Ambiguous column name 'SystemName'."
At line:12 char:1
+ $VMSelect = $cmdUpdate.ExecuteReader()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SqlException

有人可以提供解决方案来解决这个问题以获得预期的结果

错误来自 SQL,因此看起来与数据库的 powershell 连接正常并且命令尝试执行查询。

可能问题是您没有为第一个[Table]设置别名。

试试这个:

SELECT 
B.[SystemName] AS [VName]   
FROM [Table]  AS A 
LEFT OUTER JOIN    
[Table] AS B 
ON  A.[ParentMachineId] = B.[id]   
WHERE 
A.[Active] = 1 AND 
B.[SystemName] IS NOT NULL AND 
A.[SystemType] NOT IN(4)

下面的代码为我提供了我正在寻找的确切结果。 我稍微修改了代码 & 它有效

$QueryUpdate = "SELECT [Table_1].[SystemName] AS [VName]   
FROM [Table] LEFT OUTER JOIN    
[Table] AS [Table_1] ON [Table].[ParentMachineId] = [Table_1].[id]   
WHERE [Table].[Active] = 1 AND [Table_1].[SystemName] IS NOT NULL
AND [Table].[SystemType] NOT IN(4)"

$cmdUpdate=New-Object system.Data.SqlClient.SqlCommand($QueryUpdate,$conn)
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmdUpdate)
$da.fill($ds)
$conn.close()

$ds.Tables

谢谢大家。欢迎提出建议,如需升级代码