2014-11-06 129 views
1

在我的存儲過程中,我想將選擇結果導出到.CSV文件。我需要編寫一個存儲過程,從不同的表中選擇一些數據並將其保存到.CSV文件中。要導出的SQL Server存儲過程選擇結果爲CSV

選擇部分準備

SELECT DISTINCT 
        PER.NREGNUMBER_PERNUM AS [Registration Number], 
        PER.CFAMNAME_PER AS [Family Name], 
        PER.CGIVNAME_PER AS [Given Name], 
        CONVERT(varchar(10), CONVERT(date, PER.DBIRTHDATE_PER, 106), 103) AS [Birth Date], 
        PER.CGENDER_PERGEN as [Gender], 
        PHONE.MOBILE_NUMBER 
     FROM  PERSON AS PER 
        LEFT OUTER JOIN 
        PHONE ON PER.NREGNUMBER_PERNUM = PHONE.NREGNUMBER_PPHPER AND PHONE.CPRIMARY_PPH = 'Y' 
+1

所有你已經證明我們是一些非常標準的錯誤處理和'SELECT GETDATE()'。我們不知道你的表格結構是什麼樣子的,你的數據是什麼樣子的,也不知道你實際想要在CSV中有什麼數據。你期望我們能夠在這一點上給你什麼可能的幫助? – 2014-11-06 08:00:33

+0

因爲隱私我沒有分享這個程序。在這個過程中,我們需要將當前時間保存在CSV文件中。任何節省了這個程序的結果都會對我們有用。謝謝 – 2014-11-06 08:04:55

+0

只需將字段/表名改爲不顯眼 – Matt 2014-11-06 08:34:41

回答

2

該任務是我不得不在一定的時間從數據庫導出一些數據到.CSV。在開始時,我們想使用Windows調度程序來運行stp。 STP必須能夠導出數據。但我找不到方法。相反,我們所做的就是創建僅帶有數據的簡單STP。並且我們創建了批處理文件,該文件調用STP並將結果導出到.CSV文件。該批處理文件是簡單

sqlcmd -S Etibar-PC\SQLEXPRESS -d MEV_WORK -E -Q "dbo.SelectPeople" -o "MyData1.csv" -h-1 -s"," -w 700 

dbo.SelectPeople是STP
Etibar-PC \ SQLEXPRESS是模式
MEV_WORK是數據庫名稱。

0

要在

http://blog.sqlauthority.com/2009/11/25/sql-server-comma-separated-values-csv-from-table-column/

創建你的表結果的CSV字符串按照指示據我知道有沒有辦法將數據保存到直接使用TSQL在磁盤上的文件。要保存文件,可以創建一個SQL-CLR存儲過程,而不是一個TSQl存儲過程,您可以在其中使用常規C#代碼。

+0

我不允許使用C#。你確定使用TSQL是不可能的嗎? – 2014-11-06 09:12:35

+0

我還沒有看到任何有關寫入TSQL文件的例子。但它似乎sqlcmd可以做你需要什麼(http://stackoverflow.com/questions/425379/how-to-export-data-as-csv-format-from-sql-server-using-sqlcmd),如果你有執行xp_cmdshell的權限,您可以直接從您的TSQL調用sqlcmd。 – 2014-11-06 12:50:56

+0

這可能是有趣的另一個鏈接http://stackoverflow.com/questions/3169220/export-query-result-to-csv-file-in-sql-server-2008 – 2014-11-06 12:58:25

0

我有建立一個程序,以幫助大家

SET ANSI_NULLS ON 

GO 

SET QUOTED_IDENTIFIER ON 

GO 

-- example exec Sys_Database_exportToCsv 'select MyEmail from 
QPCRM.dbo.Myemails','D:\test\exported.csv' 

create PROCEDURE Sys_Database_exportToCsv 

(
@ViewName nvarchar(50), 
@exportFile nvarchar(50) 
) 

AS 

BEGIN 

SET NOCOUNT ON; 

EXEC sp_configure 'show advanced options', 1; 

RECONFIGURE; 

EXEC sp_configure 'xp_cmdshell', 1; 

RECONFIGURE; 

Declare @SQL nvarchar(4000) 

Set @SQL = 'Select * from ' + 'QPCRM.dbo.Myemails' 

Declare @cmd nvarchar(4000) 

SET @cmd = 'bcp '+CHAR(34)[email protected]+CHAR(34)+' queryout 
'+CHAR(34)[email protected]+CHAR(34)+' -S '[email protected]@servername+' -c -t'+CHAR(34)+','+CHAR(34)+' -r'+CHAR(34)+'\n'+CHAR(34)+' -T' 

exec master..xp_cmdshell @cmd 

EXEC sp_configure 'xp_cmdshell', 0; 

RECONFIGURE; 

EXEC sp_configure 'show advanced options', 0; 

RECONFIGURE; 

END 

GO