![](/img/trans.png)
[英]Passing a variable through DTEXEC with xp_cmdshell (SQL Server 2008)
[英]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.