MSSQL - 如何在BULK INSERT中设置默认值?
问题描述:
我想从下面的数据从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''
)
答
使用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
答
或者到什么@布赖恩建议,你可以加载到一个临时表,然后使用T-SQL转换数据以你想要的方式。如果你需要做一些比格式文件允许的更复杂的事情,你会这样做。您也可以在SSIS包中进行转换,而不是使用批量插入。
嗨,布赖恩, 感谢您的答复。它帮助我很多,解决了大部分问题,但还有一个问题。我的平面文件的最后一行包含平面文件中的数据数量及其动态。我如何设置跳过最后一行。?请指教。谢谢。 –
没有办法,我知道。您可以尝试使用count(*)来获取记录数,然后使用top子句来限制导入的记录。 – brian