【问题标题】:CSV Export failure from SQL View - line breaks after exportSQL 视图中的 CSV 导出失败 - 导出后换行
【发布时间】:2017-12-10 02:52:56
【问题描述】:

我有一个 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

结果如下:

您有时会看到它只是“一个”文本元素,例如“24 小时呼叫”。 ...' 有时会有多个文本元素,例如 '* Item No ... Please ...* ...' 和以此类推。

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

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

执行 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],

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

【问题讨论】:

  • 您正在插入char(13) + char(10),这是任何文本阅读器的换行符。
  • 完美!而已!我删除了 char(13) 并将 char(10) 替换为 ' ' 以获得空格字符。太简单了,谢谢!

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


【解决方案1】:

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

【讨论】:

  • 你知道我在哪里找到它们吗?
  • 数据/文本到列。无论您使用什么,都会存储以备下次使用,包括打开文件。
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多