簡體   English   中英

PowerShell 腳本文件能否在不使用 xp_cmdshell 的情況下調用引用另一個 SQL 文件的 SQL 文件

[英]Can a PowerShell script file call a SQL file which references another SQL file without using xp_cmdshell

我最初構建了一組 SQL 文件,其中主 SQL 文件通過傳遞變量並使用 xp_cmdshell 為 Invoke-Sqlcmd cmdlet 運行 PowerShell 命令來調用另一個 SQL 文件。 讓一切工作得很好而且整潔(這里是鏈接),但隨后嘗試通過使用 PowerShell 腳本啟動進程以通過一組變量調用主 SQL 文件來“提升一個檔次”,然后調用相關的“支持” " 帶有一組變量的 SQL 文件。 (PS => SQL => SQL)

在開發機器上一切正常,但由於需要代理帳戶來運行調用 xp_cmdshell 的 PS,因此在客戶服務器上無法正常工作。 不是一個大問題,但肯定會開始為部署添加更多“包袱”。 當然,我想完全遠離 xp_cmdshell,這就是我試圖從 PS 調用 SQL 文件系統的原因。

主 SQL 文件中有相當多的查詢邏輯,因此從 SQL 轉換為 PS 是相當艱巨的,但有可能。 我還嘗試使用“sp_executesql”來調用“支持”SQL 文件,但是 BulkColumn 通過 OPENROWSET 的輸出僅返回文本輸出,並且參數實際上並未像通過“Invoke-Sqlcmd”調用時那樣在 SQL 文件中進行處理變量。 使用 SQL OpenRowSet BulkColumn 從 .txt 文件中插入數據

如果我找不到其他方法來執行此操作,我可以將“支持”SQL 文件保存為存儲過程,以防止來自“主”SQL 的額外 SQL 文件調用,這應該可以工作,但我希望不要將其他對象引入客戶的本地數據庫。

關於這個的任何想法,或者“瘋狂科學家”的方法有點太瘋狂了......

從 Powershell 調用這兩個 SQL 文件,在連接特定的臨時表而不是變量中傳遞數據 - 名稱以#開頭的表。 使用create table以通常的方式創建它們。 它們的存在時間與當前連接的存在時間一樣長,因此無需明確銷毀,盡管它不會造成傷害。 但是,在創建時,請先執行“如果存在則刪除”,以防連接池為您提供與已在其中的臨時表的連接。

這樣,就不需要從 SQL 執行 SQL 文件了。 這不是一個得到很好支持的場景。

或者,將 Powershell 中的兩個 SQL 文件連接成第三個,然后執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM