Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 将文件名作为参数传递的Openrowset_Sql Server 2008 R2_Sql Server 2014 - Fatal编程技术网

Sql server 2008 r2 将文件名作为参数传递的Openrowset

Sql server 2008 r2 将文件名作为参数传递的Openrowset,sql-server-2008-r2,sql-server-2014,Sql Server 2008 R2,Sql Server 2014,为了将excel数据导入SQL Server,我使用OPENROWSET。在我的应用程序中,这个过程非常关键,而且会经常使用。每次上传,excel中平均有4万行 表格脚本: CREATE TABLE [dbo].SampleTable( Sno [int] Primary key IDENTITY(1,1) NOT NULL, [Col1] [varchar] (20) NOT NULL, [Col2] [varchar] (30) NOT NULL, [Col3

为了将excel数据导入SQL Server,我使用OPENROWSET。在我的应用程序中,这个过程非常关键,而且会经常使用。每次上传,excel中平均有4万行

表格脚本:

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
)
    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
使用OPENROWSET导入xlsx数据的脚本:

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
)
    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
我正在寻求帮助的问题:

  • 希望将其转换为以文件名为参数的存储过程。因此,从我的ASP.NET mvc页面,我可以通过只传递文件名来触发此SP

  • 当前,如果出现任何错误,都不会导入任何内容。是否可以将所有干净的数据导入表/BCP,并将错误数据记录为平面文件等


  • 您需要使用动态SQL将参数添加到“OPENRTOWSET”中。您需要使用动态SQL将参数添加到“OPENRTOWSET”中`