如何将参数列表或参数字符串(更好)连接到我的sql查询?以下不起作用。
$parameters = @("-ServerInstance `"MyMachine\SQLEXPRESS`"", "-Database %TargetDbName%", "-Username %SQLUserName%", "-Password %SQLPassword%")
$row = Invoke-Sqlcmd -Query "SELECT field FROM Table;" $parameters
我想稍后使用相同的连接参数执行多个查询,并且可以在字符串中重复使用它们,我可以将它添加到查询字符串中。
答案 0 :(得分:1)
你走在正确的轨道上。听起来像是在寻找splatting。
Splatting是一种传递参数集合的方法 作为单位的命令的值。
我不使用Invoke-SQLcmd,但它应该像这样工作:
$parameters = @{
ServerInstance = "MyMachine\SQLEXPRESS"
Database = "TargetDbName"
Username = "SQLUserName"
Password = "SQLPassword"
Query = "SELECT field FROM Table;"
}
$row = Invoke-Sqlcmd @parameters
将所有参数收集为哈希表并展开cmdlet。如果您想稍后再次使用此参数集,但进行小的更改,现在可以通过引用哈希表的名称/值对来轻松实现。
$parameters.Query = "SELECT field FROM DifferentTable;"
$anotherRow = Invoke-Sqlcmd @parameters
答案 1 :(得分:0)
查看参数splatting
这意味着您可以将参数放入哈希表中并将哈希表作为参数传递。鉴于您的代码,您可以将其更改为。请注意,即使我将参数分配给散列表$ parameters,您也必须使用@parameter语法将其发送到cmdlet。
$parameters = @{ServerInstance="MyMachine\SQLEXPRESS";Database="$env:TargetDbName";Username="$env:SQLUserName";Password="$env:SQLPassword"}
$row = Invoke-Sqlcmd -Query "SELECT field FROM Table;" @parameters
我假设在环境变量中找到了TargetDBName,用户名和密码,所以我稍微更改了代码以获得这些代码。
试一试。