2011-08-22 52 views
1

我想从下面的数据从CSV文件中获取数据。MSSQL - 如何在BULK INSERT中设置默认值?

Employee Name: Employee Id : Employee Type : Joining Date 
Henry : 00: Permanent : 01/01/2011 
Mathew : 111524 : Contract : 05/04/2011 
Steven : 002544 : Permanent : 07/12/2010 
Sophia : 015474 :    : 29/02/2011 
Rooney : 111303 :    : 11/11/2010 

现在我想设置

我有合同类型2 CVS文件和2格式的文件,其中1为永久型和1。现在我想在没有提供数据时设置表格中的值。例如,“员工类型”列。我如何设置一个默认值,当我运行永久员工CVS'员工类型=永久',当我运行合同CVS'员工类型=合同'。

BULK INSERT Employee_Table 
    FROM 'C:\Employee.csv' 
    WITH ( 
     FIELDTERMINATOR ='';'', 
     FIRSTROW = 2, 
     ROWTERMINATOR = ''\n'' 
     ) 

回答

3

使用OPENROWSET这样你就可以默认领域:

INSERT [dbo].[Employee_Table] 
    ([Employee Name], [Employee Id], [Employee Type], [Joining Date]) 
SELECT [Employee Name] 
    , [Employee Id] 
    , [Employee Type] = 'Permanent' 
    , [Joining Date] 
FROM OPENROWSET (BULK 'C:\Employee.csv',FORMATFILE='C:\formatfile.xml') as BulkLoadFile 

http://msdn.microsoft.com/en-us/library/ms190312.aspx

+0

嗨,布赖恩, 感谢您的答复。它帮助我很多,解决了大部分问题,但还有一个问题。我的平面文件的最后一行包含平面文件中的数据数量及其动态。我如何设置跳过最后一行。?请指教。谢谢。 –

+0

没有办法,我知道。您可以尝试使用count(*)来获取记录数,然后使用top子句来限制导入的记录。 – brian

1

或者到什么@布赖恩建议,你可以加载到一个临时表,然后使用T-SQL转换数据以你想要的方式。如果你需要做一些比格式文件允许的更复杂的事情,你会这样做。您也可以在SSIS包中进行转换,而不是使用批量插入。