将BulkColumn拆分为行

时间:2019-08-16 12:13:37

标签: sql-server tsql sql-server-2016

我当前将以下数据存储在CSV文件中:

253056.0015
253056.0016
253056.0010
253056.0011
253056.0012
253056.0013
253056.0014
253056.0007
253056.0008
253056.0009
253056.0006
253056.0005
252914.0028
253056.0001
253056.0002
253056.0003
253056.0004
253058.0001
252914.0026
252914.0027
252914.0023
252914.0024
252914.0025
252914.0015
252914.0016

以上所有数据都在一栏中。

当我运行以下查询时:

select
    *
from 
    openrowset(bulk 'C:\Audits.csv', single_clob) as data;

我得到这样的数据:

Results1

如何获取数据以使其完全显示在CSV文件中?

即-像这样在彼此下方显示它:

Expected Results

我尝试了以下操作,但没有成功...

declare @results varchar(max)

select
@results = BulkColumn
from openrowset(bulk 'C:\Audits.csv',single_clob) as data;

select value from string_split(@results, ' ');

请帮助。

2 个答案:

答案 0 :(得分:3)

要直接从OPENROWSET获取列,您需要定义一个Format File。一个更简单的替代方法是使用BULK INSERT,例如

IF OBJECT_ID(N'tempdb..#Data', 'U') IS NOT NULL
    DROP TABLE #Data;

CREATE TABLE #Data (Value DECIMAL(10, 4));

BULK INSERT #Data 
FROM 'C:\Audits.csv'
WITH
(
    FIRSTROW = 1,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

SELECT *
FROM #Data;

NB这仅适用于:

CREATE TABLE #Data (Value DECIMAL(10, 4));
BULK INSERT #Data 
FROM 'C:\Audits.csv';

但是我包含了这些选项,因为这些是相当普遍的事情,可能需要修改。

答案 1 :(得分:1)

您所稀疏的是一个空格' '并不是一个真正的空格。

您可以将(SELECT SUBSTRING(@results , 12, 1))用作

select value from string_split(@results, (SELECT SUBSTRING(@results , 12, 1)));