使用 PowerShell 7 从 SQL Server 2005 提取数据的最快方法是什么?

问题描述 投票:0回答:1

这不仅仅是简单的提取。 我有两张桌子。我从一个表中获取值,然后使用该表中的一列在另一个表中查找相应的值,然后提取所有值。 细节: 在视图

vEngBillsOfMaterial_Aras
中有列
usedonRn
。我从另一个视图中获取与
usedOnRn
对应的所有值
[vEngParts_Master_Aras]
收到值后,我将收到的值和来自
vEngBillsOfMaterial_Aras
的现有值合并到一个数组中,因为这就是最终结果。

我正在使用 Powershell 7 获取\处理来自 SQL Server 2005 的数据

我可以通过几种方法来做到这一点。在处理行时不断更新数组并立即写入 csv 文件或在处理时将每行写入 csv(这是下面代码中的方法)

挑战在于需要处理 700,000 行,将其写入 CSV 是一个极其缓慢的过程。我们正在谈论 12 小时写入 50,000 行。 我尝试创建视图而不是 CSV 并更新视图,但视图无法更新,因为数据包含“派生”或“常量”值。

这里达到预期结果的最快方法是什么。

$server = "ServerName"
$database = "DBName"
$csvFilePath = "CSVPath"
$query = "SELECT Distinct UsedOnRn From [Eng].[dbo].[vEngBillsOfMaterial] Order By UsedOnRn ASC"
$invokeQuery = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query
$array = @()
foreach($item in $invokeQuery){
    $usedOnRn = $item.UsedOnRn
    $queryParts = "Select Revision,PartRn,Part_Number from [Eng].[dbo].[vEngParts_Master] Where PartRn = '$usedOnRn'"
    $queryUsedOnRn = "SELECT * From [Eng].[dbo].[vEngBillsOfMaterial] Where UsedOnRn = '$usedOnRn'"
    $invokeUsedOnRn = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query  $queryUsedOnRn
    $invokeQueryParts = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query  $queryParts
    Foreach($row in $invokeUsedOnRn){
        $array = [PSCustomObject]@{
            PartRn = $row.PartRn
            PART_NUMBER = $row.PART_NUMBER
            Revision =  $row.Revision
            UsedOnRn =$row.UsedOnRn
            RevOfUsedOnRn = $invokeQueryParts.Revision
            PartNoOfUR = $invokeQueryParts.Part_Number
            Item = $row.Item
            QtyPerAssy = $row.QtyPerAssy
            Remarks = $row.Remarks
        }
        $array | Format-table 
    }
    $array | Export-Csv -Path $csvFilePath -Append -NoTypeInformation -Force 
}
sql sql-server powershell sql-server-2005 powershell-7
1个回答
0
投票

直接使用这个查询:

SELECT T1.PartRn,
       T2.Part_Number,
       T2.Revision,
       T2.UsedOnRn,
       RevOfUsedOnRn,
       PartNoOfUR,
       Item,
       QtyPerAssy,
       Remarks
From  Eng.dbo.vEngBillsOfMaterial AS T1
      JOIN Eng.dbo.vEngParts_Master AS T2
         ON t1.PartRn = T2.UsedOnRn
© www.soinside.com 2019 - 2024. All rights reserved.