MSSQL - 如何在BULK INSERT中设置默认值?

时间:2011-08-22 05:52:57

标签: sql-server sql-server-2005

我正在尝试使用以下数据从csv文件中获取数据。

Employee Name: Employee Id : Employee Type : Joining Date 
Henry   : 000123   : 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'' 
        )  

2 个答案:

答案 0 :(得分:5)

使用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

答案 1 :(得分:1)

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