我有一个从sql数据库导出的csv文件。该文件有2列,包含100条记录: FunctionName 和 DateCreated
所以我希望看到数据库中每个函数引用的每个对象。
这是我到目前为止编写的代码:
$Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
FROM dbo.fn_DependantObjects('$FunctionName', 1, 0)
ORDER BY ThePath"
请注意:dbo.fn_DependantObjects
,是我已创建的功能。
$fileName = 'c:\CurrentDate.csv'
foreach ($pattern in (Import-Csv $filename | % {$_.FunctionName})) {
Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
我仍然是PowerShell的新手,如果有人能以任何其他方式帮助我,我将非常感激。我被困住了,这个项目落后于计划。
让我知道。
由于 不朽
答案 0 :(得分:2)
在$Query
字符串中,您使用$FunctionName
来引用功能名称,但在foreach()
循环中使用$pattern
- 首先修复此问题。
然后,确保在 $Query
被分配后指定$FunctionName
字符串:
$fileName = 'c:\CurrentDate.csv'
foreach ($FunctionName in Import-Csv $filename | % {$_.FunctionName}) {
$Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
FROM dbo.fn_DependantObjects('$FunctionName', 1, 0)
ORDER BY ThePath"
Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
}
答案 1 :(得分:0)
从查询中查看此行:
FROM dbo.fn_DependantObjects('$FunctionName', 1, 0)
它正在尝试使用字符串插值在字符串中设置$FunctionName
变量。但是,在您运行该代码时,$FunctionName
还没有值。当你第一次将它分配给$Query
变量时,它试图完成字符串插值,而不是通过循环保存每次迭代的占位符。
要解决此问题,您需要将该字符串变量赋值代码移动到循环中:
$fileName = 'c:\CurrentDate.csv'
foreach ($pattern in (Import-Csv $filename | % {$_.FunctionName})) {
$Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
FROM dbo.fn_DependantObjects('$FunctionName', 1, 0)
ORDER BY ThePath"
Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
}
答案 2 :(得分:0)
with -format(-f)喜欢它:
Import-Csv $filename | %{
$Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
FROM dbo.fn_DependantObjects('{0}', 1, 0)
ORDER BY ThePath" -f $_.FunctionName
Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
}