2017-02-08 4 views
0

Могу ли я указать массивную команду вставки для создания таблицы с первой строкой в ​​виде столбцов как-то из файла .csv?Создайте таблицу и вставьте данные из csv в SQL Server

BULK INSERT DataExtraction 
FROM '\\server03\c$\wwwroot\Filename.csv' 
WITH 
    (FIRSTROW = 2, 
    FIELDTERMINATOR = ',', --CSV field delimiter 
    ROWTERMINATOR = '\n', --Use to shift the control to next row 
    TABLOCK 
    ) 
+0

Это специальный тип, что вам нужно сделать, время от времени или что-то, что нужно повторить? Можете ли вы использовать мастер импорта и экспорта SQL Server, который фактически создает пакет SSIS за кулисами? https://msdn.microsoft.com/en-us/library/ms141209(v=sql.105).aspx – nscheaffer

+0

Это нужно повторить, я увидел, что мастер делает это, поэтому я предположил, что должен быть способ. –

ответ

1

У меня было немного удачи, выбрав верхнюю 1 строку CSV в таблицу TEMP и используя динамический SQL для создания таблицы.

--import the headers from the CSV. Make sure your XML is right 
SELECT TOP 1 * INTO #temp 
FROM OPENROWSET(BULK 'c:\temp\csv.csv', FORMATFILE= 'c:\temp\csv.xml') AS a 

--define and set your variables, one to each column of the CSV 
DECLARE @var1 VARCHAR(50) 
DECLARE @var2 VARCHAR(50) 

SET @var1 = (SELECT TOP 1 col0 FROM #temp) 
SET @var2 = (SELECT TOP 1 col1 FROM #temp) 

--build your dynamic query to create Table1. Table name can also be dynamic 
declare @sql varchar(MAX) 
SET @sql = 'create table Table1 (' + @var1 +' varchar(50), ' [email protected]+ ' varchar(50))' 

--EXECUTE your sql 
EXEC (@sql) 

И ваш XML может выглядеть (благодаря Иржи Hubáček):

<?xml version="1.0"?> 
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<RECORD> 
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="510" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="510" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="510" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
</RECORD> 
<ROW> 
    <COLUMN SOURCE="1" NAME="col0" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="2" NAME="col1" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="3" NAME="col2" xsi:type="SQLNVARCHAR"/> 
</ROW> 
</BCPFORMAT>