Sql-Server
“無法打開 BCP 主機數據文件”使用 SSMS 中的 xp_cmdshell 但命令行有效
我有一個儲存過程,它每隔一段時間就會在一項作業上執行,以 BCP 我編寫的應用程序留下的一些文件。
我注意到文件堆積如山,而 BCP 沒有撿起它們,所以我在 Management Studio 中使用以下方法進行了測試:
DECLARE @sql VARCHAR(MAX) DECLARE @path VARCHAR(512) = 'C:\BCPFiles\' --Use BCP to copy files in character format from the target directly into the table. SET @sql = 'bcp [MyDB].[dbo].[MyTable] in ' + @path + 'bcpFile.dat -c -T' EXEC master..xp_cmdshell @sql
並收到此錯誤消息
使用同一命令從同一伺服器上的命令行執行沒有問題。
以下是其他一些觀察結果:
- 我可以執行
EXEC master..xp_cmdshell 'dir C:\*.*'
並且結果按預期返回。- 如果我將文件複製並重命名為不同的名稱,BCP 會選擇它
- 我的應用程序沒有打開該文件:我可以移動它、重命名它、編輯和保存它、刪除它等等……沒有任何來自 Windows 的投訴。
- 文件的內部格式顯然沒問題(見2.)
NT SERVICE\MSSQLSERVER
對目錄具有完全控制權限。- 楓葉隊昨天交易了 Dion Phaneuf
任何幫助表示讚賞。
我剛剛讓你的程式碼為我工作。
嘗試這個:
選項 A
- 將“C:\BCPFiles\bcpFile.dat”的完全控制 NTFS 權限分配給您將在 SQL Server Management Studio 中用於執行查詢的使用者
- 在 SQL Server Management Studio 中重新執行查詢
選項 B
或者,只是為了克服以下錯誤,請嘗試:
Error = [Microsoft][ODBC Driver 11 for SQL Server]Unable to open BCP host data-file
- 刪除/移動您的 bcpfile.dat 文件
- 在命令行類型上(創建一個虛擬文件——是的,會有導入錯誤,但只是為了過去打開文件……)
迴聲。> c:\bcpfiles\bcpfile.dat 3. 在 SQL Server Management Studio 中重新執行查詢
如果選項 A 有效,那麼這是一個權限問題。如果選項 B 有效(克服最初的錯誤),那麼您有一個打開的文件——即使它似乎沒有打開。有一些實用程序可以幫助找到這些打開的文件,但一種廉價而簡單的測試方法就是重新啟動伺服器——希望它是一個開發/測試盒。