这不仅仅是简单的提取。 我有两张桌子。我从一个表中获取值,然后使用该表中的一列在另一个表中查找相应的值,然后提取所有值。 细节: 在视图
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
}
直接使用这个查询:
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