SQL视图中的CSV导出失败 - 导出后的换行符

时间:2017-07-06 08:05:38

标签: sql sql-server-2008 csv export-to-csv

我有一个SQL视图,其中包含一个带有连接文本的列。

本文来自一个函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[FC01_FunctionName]
    (@OrderNr VARCHAR(200)) 
RETURNS VARCHAR(2000)
BEGIN
    declare @r varchar(2000)
    declare @z varchar(2000)

    DECLARE cc CURSOR FOR
        SELECT SL.Description 
        FROM dbo.[DBName] SL
        WHERE x = @OrderNr AND y = 1

    SET @r = ''

    OPEN cc

    WHILE ( 0 = 0 ) 
    BEGIN
        fetch next from cc into @z

        if (@@fetch_status <> 0) 
            break

        if ( @r = '' ) 
        begin
            set @r = @z
        end
        else
        begin
            set @r = @r + char(13) + char(10) + @z 
        end
    end

    close cc
    deallocate cc

    return @r
end

结果如下:

enter image description here

正如你所看到的那样,有时它只是'一个'文本元素,比如'24小时呼叫。 ...'有时会有多个文字元素,例如' *项目编号 请...... * ......'等等。

每次将视图导出到.csv文件时,我都会遇到包含多个文本元素的行的问题。它会为每个附加文本元素生成一个新行并破坏格式(所有黄色标记的文本应该在一个字段中 - &gt;带有文本'*** Item ...'的字段):

enter image description here

在最后一个(黄色标记的)文本元素之后,正常条目继续。

执行SQL视图到.csv导出的作业的属性如下:

sqlcmd -W -s ";"  -E  -d master -Q "SET NOCOUNT ON; SELECT *  FROM [DB].[dbo].[ViewName];" -o "c:\Temp\XXX.csv"

我认为导出函数认为文本元素是分开的,这可能是函数决定为每个元素花费新行的原因。 我也相信我必须在sql函数中改变一些东西,它会为字段创建结果,或者在视图中自己获取数据。

这是视图中获取数据的SQL查询的一部分:

(SELECT [dbo].[FC01_FunctionName] (  x.[FieldName]) ) as [ColumnName],

有什么想法吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在Excel中查看文本到列设置。可能是csv导出正确(在记事本中打开以进行检查)但Excel会在文件打开时拆分行。