Openrowset将文件名作为参数传递

时间:2016-07-18 12:23:48

标签: sql-server-2008-r2 sql-server-2014

要将Excel数据导入SQL Server,请使用OPENROWSET。我的应用程序中的这个过程非常关键,并且会经常使用。每次上传都会在excel中平均有40K行。

表脚本:

CREATE TABLE [dbo].SampleTable(
    Sno [int] Primary key IDENTITY(1,1) NOT NULL,
    [Col1] [varchar] (20) NOT NULL,
    [Col2] [varchar] (30) NOT NULL,
    [Col3] [varchar] (30) NOT NULL
)

使用OPENROWSET导入xlsx数据的脚本:

    BEGIN TRAN
        BEGIN TRY

            --Import the xls data into a temp table
            SELECT * INTO #tmp 
            FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;
Database=E:\test.xlsx', 'SELECT * FROM [Sheet1$]');

            --Remove existing data which matches the Col1 in the xls.
            DELETE FROM dbo.SampleTable 
            WHERE Col1 IN (SELECT  DISTINCT (Col1) FROM #tmp)

            INSERT INTO [dbo].[SampleTable] (Col1, Col2, Col3)      
            SELECT Col1, Col2, Col3 FROM #tmp xls   

            --Clean up
            DROP TABLE #tmp;

        COMMIT TRAN

        END TRY
        BEGIN CATCH
          ROLLBACK TRAN
        END CATCH

我正在寻求帮助的问题:

  1. 想要将此转换为将文件名作为参数的存储过程。因此,从我的ASP.NET mvc页面,我可以通过仅传递文件名来触发此SP。

  2. 目前,在任何错误上都没有导入任何内容。是否可以导入所有干净的数据并将错误的数据记录到表/ BCP中作为平面文件等,?

0 个答案:

没有答案
相关问题