2017-06-19 77 views
0

我有下面的代碼,但現在需要對銷售數據文件的唯一文件名(日期末)唯一的輸出文件名

USE [KevinMayhewLive] 
GO 
/****** Object: StoredProcedure [dbo].[toFileSalesData] Script Date: 06/19/2017 13:36:27 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER procedure [dbo].[toFileSalesData] 
as 

--xp_cmdshell will shell out to the command line to run bcp 
--the user account that runs this procedure should have file access to create and write files 
--bcp does not append to files, all data will be overwritten each time this procedure runs 

EXEC KevinMayhewLive..xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_CUSTOMER_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Customer_data\CUSTOMER_DATA.csv -c -t, -T -S' 

EXEC KevinMayhewLive..xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_SALES_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Sales_Data\sales_items.csv -c -t, -T -S' 
+1

你的意思是唯一的文件名?你的查詢有兩個不同的文件名輸出 –

+0

嗨,歡迎來到SO。目前還不清楚你想從這個問題中得到什麼。看來你想每次執行這個SalesData文件都有一個唯一的名字?對這個名字的結構有什麼想法?那個選擇語句剛好在ALTER之前有什麼意義? –

+0

啊忘了刪除(以前的一些不好的建議) –

回答

0

你沒有描述什麼你的意思是一個「唯一」文件名,但如果你想在文件名中加入一個時間戳(這在大多數情況下會導致唯一性),你必須動態生成一個文件名。例如:

EXEC xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_CUSTOMER_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Customer_data\CUSTOMER_DATA_'+REPLACE(CONVERT(NVARCHAR(40), GETDATE(), 120),':','')+'.csv -c -t, -T -S' 
+0

需要最後的日期,它每天都在運行,所以他們(我們的電子郵件人員)希望每天都有銷售數據的文件名,這樣他們就不會感到困惑。 –

+0

我建議你也包括時間,以便你可以每天多次運行它(現在可能不需要*,但有一天有人會要求它,另外,你會每天測試多次)。我的代碼包括時間。 – alroc

+0

爲什麼在xp_cmdshell之前使用數據庫名稱? – Wendy