【发布时间】: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