Sql-Server

如何從作為 SQL 代理作業的一部分執行的 PowerShell 腳本中擷取數據?

  • February 13, 2020

我有一個從代理作業呼叫的 PowerShell 腳本,該腳本打開一個 Excel 文件,將其轉換為 .CSV 並將 .CSV 文件保存在特定位置,以便我使用 BULK INSERT 導入它。

我需要做的是在載入文件*之前計算文件中的行數。*如果文件高於一定數量的行,我想將文件載入到不同的表中。這在 PowerShell 中很簡單,我可以毫無問題地將計數放入 PowerShell 變數中。

但是,我不知道如何將該變數讀入 SQL,以便可以在 BULK INSERT 過程中使用它。

所以我的問題是:從 SQL 代理作業執行 PowerShell 時,我如何從該 PowerShell 腳本的輸出中讀取值,無論是表、臨時表還是變數,我真的不介意哪個?

感謝@Tony Hinkle 作為評論給出答案。在這裡它被提升為一個實際的答案,所以希望下一個有這個問題的人能找到它:

我在我的“自動化”數據庫中創建了一個名為“ImportRowCount”的表,其中有一列名為“RowCount”,並在其中插入了一行編號為 0

接下來,我將此行添加到我的 Powershell 腳本中:

invoke-sqlcmd -ServerInstance SQLServerHostName -Query "UPDATE Automation.dbo.ImportRowCount SET RowCount = $NumRows"

(將“SQLServerHostName”替換為您的實際伺服器的主機名)

因此,現在我的 Powershell 腳本每次執行時都會使用 $NumRows 變數的值更新該單行。

這是完美的,因為我可以在執行剩餘程序之前讀取該表的內容,並且可以將其用作決策點,根據文件中的行數將我的程式碼分支到各種不同的路徑中。

引用自:https://dba.stackexchange.com/questions/259616