2014-11-06 131 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