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
谢谢大家。欢迎提出建议,如需升级代码
我写了一个 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
谢谢大家。欢迎提出建议,如需升级代码