【问题标题】:Cannot figure out how to combine arrays to be able to write to SQL columns in powershell无法弄清楚如何组合数组以便能够写入 powershell 中的 SQL 列
【发布时间】:2021-08-20 04:01:16
【问题描述】:

我已经为此苦苦挣扎了几个小时,但没有任何结果:(。我有一个选择字符串命令,可以在文件中找到各种字符串

$sasnrs =  @(Select-String -Pattern "SASI.{11}" -path $Temp1 | Select-Object -ExpandProperty Matches)
$sassuppcars = @(Select-String -Pattern "TMB.............." -path $Temp1  | select-object -expandproperty Matches)
$sasprices = @(Select-String -Pattern '[1-2]?\.?\d{3},\d{2}' -path $Temp2 | select-object -expandproperty Matches)

这让我得到这样的输出

PS D:\Temp> $sasnrs

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 15
Value    : SASIVB0XXXXX0

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 15
Value    : SASIIM0XXXX659

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 15
Value    : SASIIMXXXXXXX9

PS D:\Temp> $sassuppcars


Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 18
Length   : 17
Value    : TMBXXXXXXX90

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 17
Length   : 17
Value    : TMBXXXXXXXXX5625

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 17
Length   : 17
Value    : TMBXXXXXXX303

PS D:\Temp> $sasprices
Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 102
Length   : 6
Value    : 824,57

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 102
Length   : 6
Value    : 683,97

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 102
Length   : 6
Value    : 487,38

我在 SQL Server 中创建了 4 列,第一个是常量,我需要填写其余三列,不幸的是,当我对每个变量的每个值运行 ForEach 循环时,此示例将创建 9 行而不是三

            ForEach($Sasnr in $Sasnrs){
                $SQLSuppNRQuery = "INSERT INTO dbo.Podpory (Marken, Doklad) VALUES ('$sasmark', '$sasnr');"    
                Invoke-Sqlcmd -ServerInstance $SQLSuppSERVER -Database $SQLSuppDatabase -Query 

$SQLSuppNRQuery
                                        }
                ForEach($sassuppcar in $sassuppcars) {
                    $SQLSuppVINQuery = "INSERT INTO dbo.Podpory (VIN) VALUES ('$sassuppcar');"    
                    Invoke-Sqlcmd -ServerInstance $SQLSuppSERVER -Database $SQLSuppDatabase -Query $SQLSuppVINQuery
                                        }
                ForEach($sasprice in $sasprices){
                    $SQLSuppPRQuery = "INSERT INTO dbo.Podpory (Suma) VALUES ('$sasprice');"    
                    Invoke-Sqlcmd -ServerInstance $SQLSuppSERVER -Database $SQLSuppDatabase -Query $SQLSuppPRQuery
                                        }

类似的东西

我尝试创建一个哈希表,但我无法理解这个概念并在 SQL 查询中使用它。

非常感谢您的帮助

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    这应该可以,我只是不确定保存值的变量的源类型对象类型是什么。

    $count = $sasnrs.count // Assuming they all have the same count here...
    $i = 0
    do {
                    $query = "INSERT INTO dbo.Podpory (Marken,Doklad,VIN,Suma) VALUES ('$sasmark','$($sasnrs[$i].Value)','$($sassuppcars[$i].Value)','$($sasprices[$i].Value)');"    
                    Invoke-Sqlcmd -ServerInstance $SQLSuppSERVER -Database $SQLSuppDatabase -Query $query
    $i++
    } until ($i -eq ($count - 1))
    

    【讨论】:

    • 在我的手机上,请原谅缩进。
    • 感谢您的回复,但是这会将所有 3 个值放在一列中,因此在单个单元格中仅创建一行包含 3 个数据的数据:(。
    • 试试这个:$query = "INSERT INTO dbo.Podpory (Marken,Doklad,VIN,Suma) VALUES ('$sasmark','$($sasnrs[$i].Value)','$($sassuppcars[$i].Value)','$($sasprices[$i].Value)');"
    • 这会产生两个空行,当我输入 PS D:\Temp> $sasnrs[0] SASIVB000241660 PS D:\Temp> $sasprices[0] 824,57 PS D:\Temp> $ sasprices[1] 683,97 PS D:\Temp> $sasprices[2] 487,38 我得到正确的值,但不是在查询中
    • 我认为这个答案看起来不错,但有一些语法错误。将VALUES ('$sasmark','$sasnrs[$i].Value','$sassuppcars[$i].Value','$sasprices[$i].Value') 更改为VALUES ('$sasmark','$($sasnrs[$i].Value)','$($sassuppcars[$i].Value)','$($sasprices[$i].Value)')。要访问双引号内的对象属性,您必须使用 $( ) docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/…
    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 2022-09-28
    • 1970-01-01
    • 2023-04-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多