我目前正在尝试开发一个生成包含SQL语句的输出文本文件的PowerShell脚本。我确定还有其他方法可以做到这一点,但我在一个奇怪的环境中,这将让我得到我所需要的最快,我相信。我试图生成用于MS Access的SQL语句。
我正在使用PowerShell ISE进行创建,到目前为止,我所拥有的是:
$taskerIDs = Import-Csv C:\test.csv
ForEach ($row in $taskerIDs){write-host "SELECT Help_Data_List.Sites,"$row.ID"FROM Help_Data_List LEFT JOIN [TASKORD-"$row.ID"] ON Help_Data_List.[Sites] = [TASKORD-"$row.ID"].[Site Name] WHERE ((([TASKORD-"$row.ID"].[Site Name]) Is Null));"}
我这样做是因为我在CSV中有大约50行,我需要在写主机行中替换那里列出的ID。
输出到屏幕返回以下内容:
SELECT Help_Data_List.Sites, 12-0371 FROM Help_Data_List LEFT JOIN [TASKORD- 12-0371 ] ON Help_Data_List.[Sites] = [TASKORD- 12-0371 ].[Site Name] WHERE ((([TASKORD- 12-0371 ].[Site Name]) Is
Null));
当你看到结果时,它显示[TASKORD-12-0371]当我想要它[TASKORD-12-0371]
答案 0 :(得分:2)
不要"#"构建"您的输出字符串如下:
"SELECT Help_Data_List.Sites,"$row.ID"FROM Help_D..."
字符串文字和$row.ID
条目基本上被解释为单个字符串,Write-Host
将在每个条目之间添加空格。
而是使用format operator(-f
):
"SELECT Help_Data_List.Sites,{0} FROM Help_D..." -f $row.ID
将表达式放在括号中,以便Write-Host
获取扩展字符串:
Write-Host ("SELECT Help_Data_List.Sites,{0} FROM Help_Data_List LEFT JOIN [TASKORD-{0}] ON Help_Data_List.[Sites] = [TASKORD-{0}].[Site Name] WHERE ((([TASKORD-{0}].[Site Name]) Is Null));" -f $row.ID)
答案 1 :(得分:1)
因为您想要访问字符串中变量的属性,所以需要使用子表达式 $()
进行字符串插值,而不是使用多个双引号:
# ....
write-host "SELECT Help_Data_List.Sites,$($row.ID)FROM Help_Data_List LEFT JOIN [TASKORD-$($row.ID)] ON Help_Data_List.[Sites] = [TASKORD-$($row.ID)].[Site Name] WHERE ((([TASKORD-$($row.ID)].[Site Name]) Is Null));"
# ....