3

因此,我有一個腳本,它使用批量插入從文件中拉出文本並將其內容插入到表中。我從文本文件加載,因爲文本可能很大,在這樣做,我不需要擔心逃跑。我有本地腳本在一個已定義的目錄下工作。 ex('C:\ Users \ me \ Files \ File.txt')但是,我需要在Post部署腳本中運行此腳本。我正在閱讀的文本文件位於同一個數據庫項目中。我無法執行設定的目錄,因爲目錄可能會因項目發佈到的不同環境而有所不同。有沒有辦法獲得相對路徑或獲得部署後解決方案/項目的目錄?批量插入後部署腳本

回答

1

所以,因爲批量插入需要絕對路徑,腳本沒有相對路徑的概念,並且這將被部署在多個我不知道絕對路徑的環境中。我決定利用Powershell和Bulk Insert。所以,我正在做的是,在數據庫項目的預生成中,我打電話給我的Powershell腳本。 Powershell腳本能夠找出它的當前目錄。我構建了一個在部署後腳本中調用的SQL文件。在這個SQL文件中,我使用當前目錄批量插入。

1

爲什麼不使用BCP:http://msdn.microsoft.com/en-us/library/ms162802.aspx?它可以處理相對路徑。如果你能夠使用所有的PowerShell,我不明白你爲什麼不能調用BCP.EXE。它基本上與BULK INSERT的API相同。

+0

我實際上需要做其他一些事情,即其他列/插入以及從文件加載文本。現在,我將批量插入臨時表中,然後執行一些其他操作並從臨時表中拉出。 – ScubaSteve 2014-11-06 19:37:34

+0

@ScubaSteve:好的,你可以在你的proc中調用'xp_cmdshell'來導入一個全局臨時表。只是一個想法。 – 2014-11-06 19:47:31

+0

是的,只是作爲練習的標準,我想避免使用全局臨時表。 – ScubaSteve 2014-11-06 19:57:34

1

您是否考慮過在文件系統上使用標準位置?當我需要寫DOS/CMD腳本可移植(包括通過T-SQL以後食用安裝的東西,如CREATE ASSEMBLY FROM),我做這樣的事情:

IF NOT EXIST C:\TEMP\MyInstallFolder (
    MKDIR C:\TEMP\MyInstallFolder 
) 

REM put stuff into C:\TEMP\MyInstallFolder now that it is certain to be there) 

REM CALL some process that looks in C:\TEMP\MyInstallFolder 

MKDIR將創建所有丟失的父文件夾。因此,像TEMP這樣的文件夾在運行Windows的個人電腦上是標準配置,因爲它們已經移動到每個用戶的臨時文件夾,但是已經創建,並且創建了MyInstallFolder,所以不會出現任何錯誤。 IF NOT EXIST將確保在第一次運行後重新運行腳本也不會出錯。

+0

是的,我考慮過使用文件系統。但是,對於源代碼控制的緣故,應該在哪裏添加/編輯文件的邏輯內聚,將它放在數據庫項目中是有意義的。至於你的CMD建議,我認爲我正在做一些與Powershell類似的事情。 – ScubaSteve 2014-11-06 22:14:55