SQL : 一个存储过程,用于向指定的MS SQL Table中导入CSV 格式的文件数据

最近因工作需要,从一个应用程序中导出CSV格式的数据表,然后导入到另一个应用环境的MS SQL数据表中,因为涉及多个CSV导出文件的导入工作
所以,写了一个储存过程,赋予其一定的灵活性,用户可以指定CSV文件存放的路径,CSV文件的名称,以及导入MS SQL 数据表的名称。这样,我们
就可以在.NET 代码中动态编程来导入指定位置的指定CSV文件到指定的MS SQL数据表中。
需要注意的是:在导入CSV文件前,我们需要事先在MS SQL中建立与CSV文件对应的数据表
例如:
CSV 文件内容:
Area     Machine         Job
PLANT 1 L02M35 1774-DP5156
PLANT 1 L02M67 1831-DP5156
PLANT 1 L02M02 1832-DP5156
PLANT 1 L03M44 1792-D115
PLANT 1 L05M29 1725-DP4975
PLANT 1 L05M29 1723-DP4975
PLANT 1 L05M29 1820-DP4975
则我们需要建立一个MS SQL数据表,拥有字段:

Area, Machine, Job

MS SQL数据表的字段与CSV文件内容字段一一对应。

然后才能使用此处的存储过程进行导入工作,存储过程的内容如下:

CREATE PROCEDURE [dbo].[MY_Import_CSVfile]
@SourceFilePath NVARCHAR(
200),     --The folder where you upload the CSV file on your server. eg:'D:\\DATAExchange\\CSVTMP'
@SourceFileName NVARCHAR(
100),   -- The Csv fileName that you want to import. eg: 'ExportFileOne.csv'
@DestTableName NVARCHAR(
100-- The destination table Name eg: 'MSSQLExportFileTableOne'
AS
BEGIN

DECLARE @DelSQLstr NVARCHAR(
600)
DECLARE @ImpSQLstr NVARCHAR(
600)

-- Clear the Content of the Destination Table
SET @DelSQLstr
='DELETE FROM ' +@DestTableName
Exec sp_executesql  @DelSQLstr  

-- Import csv Data Into the Destination Table
SET @ImpSQLstr
='INSERT INTO '+@DestTableName
+'  SELECT * FROM OPENROWSET(''MSDASQL'',''Driver={Microsoft Text Driver (*.txt; *.csv)};
  DEFAULTDIR='+@SourceFilePath+';Extensions=CSV;'',''SELECT * FROM "'+@SourceFileName+'"'')'

Exec sp_executesql  @ImpSQLstr  

SELECT  @@ROWCOUNT

END


--============Excute Example=====================
--
--USE [MYTESTDB]
--GO
--
--DECLARE    @return_value int
--
--EXEC    @return_value = [dbo].[MY_Import_CSVfile]
--        @SourceFilePath = N'D:\\DATAExchange\\CSVTMP',
--        @SourceFileName = N'ExportFileOne.csv',
--        @DestTableName = N'MSSQLExportFileTableOne'
--
--SELECT    'Return Value' = @return_value
--
--GO
--
--SELECT * FROM dbo.MSSQLExportFileTableOne

 

此代码在MS SQL2005中调试通过。

 

posted @ 2010-09-30 10:49  wsdj  阅读(2013)  评论(0编辑  收藏  举报