SQL Server:转义字符串

时间:2017-09-19 18:50:31

标签: string csv sql-server-2012 escaping email-attachments

我将数据从SQL Server表导出到.csv文件,然后我使用sp_send_email通过电子邮件将数据发送给该文件。

我的问题是这个值:

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 = '6lack@email.com',
                @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;

2 个答案:

答案 0 :(得分:1)

如果字段中有逗号(或分隔符),则该字段应使用双引号括起来,并且其中的任何双引号都必须使用另一个双引号进行转义:

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

在字段周围使用双引号后,还应引用包含双引号的所有字段,并在引号内转义。

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

删除所有逗号也可以是一个选项,但之后会丢失一些信息。

另一方面,如果只有一列(如SELECT语句中那样),则根本不需要使用csv。可以使用纯文本文件。

答案 1 :(得分:0)

将存储过程中的查询更改为以下内容:

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

请注意,这是未经测试的,但应该为您提供您正在寻找的内容。这是假设剥离逗号是可以接受的,如最初的帖子所示。如果逗号需要保持完整,那么答案就不那么简单了。