簡體   English   中英

xp_cmdshell 本機錯誤 208,SQL Server 2008 R2 中的 BCP

[英]xp_cmdshell Native Error 208, BCP in SQL Server 2008 R2

我一直在嘗試獲取大型多連接 SELECT 語句的結果,並將查詢結果作為 CVS 文件通過電子郵件發送。 我有正確的查詢和電子郵件發送,但我無法將結果自動導出為 CVS 文件。 從我讀過的內容來看,自動導出查詢結果的最佳選擇是名為“BCP”的工具。

我嘗試在 Management Studio 中像這樣使用 BCP:

USE FootPrint;

DECLARE @sql VARCHAR(2048);
DECLARE @dir VARCHAR(50);

SET @dir = 'C:\Users\bailey\Desktop';
SET @sql = 'bcp "SELECT TOP 10 * FROM datex_footprint.Shipments" queryout "' + @dir + '" -c -t, -T';

EXEC master..xp_cmdshell @sql;

FootPrint 是特定數據庫的名稱,而 datex_footprint 是模式。 (這不是真正的查詢,只是一個測試)。

當我運行它時,我得到的錯誤是:“SQLState=S0002, NativeError = 208”“Error = [Microsoft][SQL Server Native Client 10.0][SQL Server] Invalid object name 'datex_footprint.Shipments'。”

我 100% 肯定 datex_footprint.Shipments 是我嘗試測試的數據的正確模式\\表訪問。

有沒有人看到我在嘗試將此結果導出到 CSV 文件時遺漏了什么或做錯了什么? 不過,具體來說,我正在嘗試使這個過程自動化。 我知道如何將結果導出到 CSV 文件中,但我想在 T-SQL 中執行此操作,以便我可以按一天中的時間自動生成文件。

任何幫助,將不勝感激!

[解決了]

我想通了我做錯了什么。 我沒有以完整的形式識別視圖。 我使用的是“schema.Table/View”,而不是“database.schema.table/view”。 此外,我添加了一個“-S”+@@SERVERNAME 標志——這告訴 BCP 實用程序使用 SQL Server 當前連接到的服務器進行查詢。

在 T-SQL、SQL Server 2008 中生成 SELECT 查詢結果的 CSV 文件的正確代碼是:

DECLARE @sql VARCHAR(8000);

SELECT @sql = 'bcp "SELECT * FROM FootPrint.datex_footprint.Shipments" queryout "C:\Users\bailey\Desktop\FlatTables\YamotoShipping.csv" -c -t, -T -S' + @@SERVERNAME;

exec master..xp_cmdshell @sql;

所以一旦我添加了“FootPrint”。 識別數據庫,它起作用了。

注意:我正在運行 SQL Server 2008 R2。

我有同樣的錯誤,但我以不同的方式解決了它。 我已將默認數據庫添加到我的 ID,然后 BCP 開始在我的默認數據庫中查找表並處理文件。

在搜索和閱讀bcp的文檔后,我發現當我們復制數據時,我們應該使用全局臨時表,即 ## 而不是 #.. 因為在tempdb它會發生沖突並且不允許將數據復制到目標文件。

例子:

DECLARE @OutputFilePath nvarchar(max); SET @OutputFilePath = 'C:\OutputData'
DECLARE @ExportSQL nvarchar(max); SET @ExportSQL = N'EXEC xp_cmdshell ''bcp 
"SELECT * FROM LW_DFS_DIT.dbo.##Mytemptable " queryout "' + @OutputFilePath + 
'\OutputData.txt" -T -c -t '''

EXEC(@ExportSQL)

希望這會有所幫助

暫無
暫無

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

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