2017-09-19 134 views
1

我正在将数据从SQL Server表导出到.csv文件,然后使用sp_send_email通过数据向文件发送电子邮件。SQL Server:在字符串中隐藏标点符号

我的问题是这个值:

Cantata Number 212 "Peasants Cantata", BWV 212 

值会分成两列在.csv文件被通过电子邮件发送。该值应该只在一列中。

某些标题可能包含逗号,这些逗号需要保留在字符串中以供这些实例使用。

例如:

Cantata Number 212 Peasants Cantata"  BWV 212" 

这个方法我试过,但不工作:

注意:此SELECT声明驻留在视图内vw_WeeklyReport

SELECT TOP 100 PERCENT 
    '"' + [p].[Title] + '"' [Title] 
FROM 
    table 

的代码导出数据并通过电子邮件发送.csv文件:

BEGIN 
    SET NOCOUNT ON; 

    DECLARE @qry VARCHAR(8000); 

    -- Create the query, concatenating the column name as an alias 
    SET @Qry = 'SET NOCOUNT ON; SELECT Title FROM [vw_WeeklyReport] SET NOCOUNT OFF'; 

    -- Send the e-mail with the query results in attachment. 
    EXEC [msdb].[dbo].[sp_send_dbmail] 
       @profile_name = 'default', 
       @recipients = '[email protected]', 
       @subject = 'Weekly Report', 
       @body = 'An attachment has been included in this email.', 
       @query_attachment_filename = 'WeeklyRep.csv', 
       @query = @qry, 
       @attach_query_result_as_file = 1, 
       @query_result_separator = ',', 
       @query_result_width = 32767, 
       @query_result_no_padding = 1; 
END; 
+0

如果删除逗号是可以接受的,则应该考虑使用SQL中的'replace'来完成该操作。 – user2366842

+0

某些值将包含逗号,并且必须将逗号留在字符串中。 –

+0

另一种选择是重做导出以使用除逗号以外的其他分隔符,尽管这可能不在单个SO问题的范围之内。 – user2366842

回答

0

在存储过程中更改您的查询是这样的:

SET @Qry = 'SET NOCOUNT ON; SELECT replace(Title, ',', '') as Title FROM [vw_WeeklyReport] SET NOCOUNT OFF'; 

注意这是未经测试,但应该给你你在找什么。正如初始文章所指出的那样,假设剥离逗号是可以接受的。如果逗号需要保持完整,答案并不那么简单。

0

当有逗号(或分离器)领域,该领域应加上双引号,任何双引号内已与另一双引号进行转义括:

"Cantata Number 212 ""Peasants Cantata"", BWV 212" 

一旦双引号在字段周围使用,所有包含双引号的字段也应该引用,并且引号内部也会被转义。

也许你可以寻找一个选项来导出到csv使用引用字段。

删除所有的逗号也可能是一个选项,但然后你失去了一些信息。另一方面,如果只有一列(就像在你的SELECT语句中那样),根本就不需要使用csv。可以使用纯文本文件。

+0

还有其他的列,我只是包括给我麻烦的一个 –

+0

@the_lone_note好吧,那么你将不得不格式化字段如上所示(或者可能使用一个导出选项,如果存在的话)。或者在你的领域用'“”替换''''。 –