0

当我从 SQL 查询构建数据表时,我想用 Select 插入一个 PowerShell 变量值。

从 TechNet 库中借用函数 invoke-sqlcmd2 并将其点源化。

$NewSequenceID = invoke-sqlcmd2 -ServerInstance "MyServer" -Database "MyDB" -Query "INSERT INTO [Sequence] (TimeStarted) SELECT GETDATE(); SELECT max(SequenceID) as SequenceID FROM [Sequence]" | foreach { $_.SequenceID }

这会生成一个新的序列 ID 并标记我们开始批处理的时间。结果将产生一个数字,该数字将识别此运行。使用“写入 $NewSequenceID”进行验证。我想将查询的后续结果与此 SequenceID 一起保存以进行分析。

然后我有这个:

$PollTime = Get-Date -format "yyyy-MM-dd HH:mm:ss"

然后我想这样做:(编辑:此语句不起作用-底部的错误消息)

$AuditUserOutput = invoke-sqlcmd2 -ServerInstance "MyServer2" -Database "MyDB2" -Query "SELECT $NewSequenceID, $PollTime, [USERID], [PID], [UDATE] FROM [MyTable]"  -As 'Datatable'

并对表做一些事情,然后用 write-datatable 写。

如果我为前两个值选择 NULL 并从现有表中获取其他三个值,它工作正常。我想从前面的语句中添加 $NewSequenceID 和 $PollTime。

我已经阅读了十几页关于使用 `(反引号)、$、{} 等的内容,但我没有正确理解。有人可以帮助使用正确的语法将这些变量值插入到选择中吗?

PS 错误是:使用“1”参数调用“填充”的异常:“无效的伪列“$NewSequenceID”。”

4

2 回答 2

1

您在 PowerShell 中正确插入变量。如果我理解正确,那么问题出在您的 SQL 查询上。我将在这里做一个推断,但我认为这可能是你想要的:

$AuditUserOutput = invoke-sqlcmd2 -ServerInstance "MyServer2" -Database "MyDB2" -Query "SELECT [NewSequenceID], [PollTime], [USERID], [PID], [UDATE] FROM [MyTable] WHERE NewSequenceID = '$NewSequenceID' AND PollTime = '$PollTime'"  -As 'Datatable'

如果不是,请通过回答上述问题进行澄清。

于 2013-07-30T20:46:26.927 回答
0

我能够通过首先创建一个变量来存储查询文本来解决这个问题,这允许我需要的自然替换:

$AuditUserQuery = "SELECT '$NewSequenceID', '$PollTime', [USERID], [PID], [UDATE] FROM [AUDITUSER]" 

然后在构建数据表时将该变量称为 $query 。

这避免了之前遇到的参数化问题。

于 2013-08-01T00:23:33.390 回答