使用批量插入将文件插入SQL Server 2008 R2

时间:2014-10-18 07:09:41

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

我尝试使用Bulk方法将500 MB的文件插入表(列数据类型:VARBINARY(MAX)),SQL大约需要15分钟才能插入文件。我有2GB内存,我的PC是核心2二人,我使用的是SQL Server 2008 R2。

我的问题:

  • 15分钟是否正常! ,或者它太长了?
  • 有更快的方法吗?

感谢。

我的程序是SQL

CREATE PROCEDURE [dbo].[UploadFile]
(
    @FileName   nvarchar(100) , 
    @FileSize  nvarchar(50) ,
    @FileDescription  nvarchar(200),
    @FileExtontion  nvarchar(10), 
    @DateUploaded  nvarchar(50),
    @FilePath  nvarchar(3500),
    @UserId int 
)
AS
BEGIN
    SET NOCOUNT ON;

    declare @FileInBinary varbinary(MAX)

    IF OBJECT_ID('#ORStable') IS NULL 
    BEGIN
        -- Temporary stored into a hash table for avoid data error     
        CREATE TABLE #ORStable (Length BIGINT, vDocument VARBINARY(MAX))

        DECLARE @SQL_QUERY NVARCHAR(4000)
        SET @SQL_QUERY= 'INSERT INTO #ORStable
                         SELECT len(bulkcolumn), *
                         FROM OPENROWSET(BULK '''+@FilePath+''', SINGLE_BLOB) AS BinaryData'

        exec SP_executesql @SQL_QUERY
    END

    SELECT TOP 1 @FileInBinary = vDocument FROM #ORStable

    insert into [File] ([FileName], FileSize, FileDescription, FileExtontion,
                        DateUploaded, FileInBinary, UserId)
    values (@FileName, @FileSize, @FileDescription, @FileExtontion,
            @DateUploaded, @FileInBinary, @UserId)

    DROP TABLE dbo.#ORStable
END

1 个答案:

答案 0 :(得分:0)

  

我尝试使用Bulk将500 MB的文件插入表(列数据类型:VARBINARY(MAX))   方法,

与您一样的低性能系统的大文件。

  

15分钟是否正常! ,或者它太长了?

在文件夹之间复制该文件需要多长时间,两次同时? (由于日志记录,这比SQL Server需要的多一点)?期望要么飞 - 我的sql数据库可以复制这样的东西,接近1gb /秒 - 或爬行(可能在低功率机器上,可能只有一个慢盘而不是大量的SSD)。

  

有更快的方法吗?

为手头的任务获取适当的硬件。 IO是王者 - 而SQL Server依赖于它。你的机器是RAM缺乏这项工作,可能有一个类似的非需求匹配光盘子系统。