在批量加载CSV文件期间发出SQL Server 2012权限问题

时间:2016-02-25 16:39:09

标签: sql-server sql-server-2012

我已经经历了很多其他问题而他们还没有回答具体问题。我理解它期望文件出现在SQL服务器中的错误。

我已在笔记本电脑上安装了SQL Server 2012,并尝试从本地驱动器批量插入CSV文件,但我收到错误

Msg 4801, Level 19, state 1, Line 1 
Cannot bulk load because the file could not be opened

在看了几个答案后,我明白这是一个权限问题,但我不知道如何解决它。我在Windows 10上并使用SQL Server express 2012

2 个答案:

答案 0 :(得分:1)

SQL Server需要CSV文件所在文件夹的权限。

您需要授予该文件夹(或您在SQL Server安装中创建的任何帐户)上的NT Service\MSSQLSERVER帐户的权限。如果在此之后仍然无法运行,请确保SQL Server对文件本身具有权限。如果CSV文件是在您授予SQL Server权限的目录之外的目录中创建的,则会遇到该问题。

Here is how to configure permissions on Windows folders

SQL Server Permissions

答案 1 :(得分:0)

将您的CSV文件放在C盘以外(尝试使用D,E .....)使用以下BULK INSERT语句,您可以直接从CSV文件将批量数据插入数据库。最简单的BULK INSERT查询版本如下:

BULK INSERT dbo.YourDBTableName
FROM 'D:\YourFileName.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

或者您可以处理事务和回滚,可以像这样使用try catch块:

EGIN TRANSACTION
BEGIN TRY
BULK INSERT dbo.YourDBTableName
FROM 'D:\FolderName\YourFileName.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    ROWS_PER_BATCH = 10000, 
    TABLOCK
)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH

如果两种方法中的一种顺利,那么您可能会遇到以下两个问题:

  1. ' C'驱动器权限问题:在这种情况下,您必须为特定文件/文件夹提供适当的权限。
  2. 文件必须已损坏或您的代码不正确:在这种情况下,请尝试手动使用notepad ++或任何编辑器打开文件。如果你可以打开文件然后看 FIELDTERMINATOR ,这里我使用昏迷(,)。有些时候 vertical var(|)用于分隔数据。如果需要,请改变它。
  3. 另一个重要的事情是,尝试以管理员运行SQL Server 2012 Management Studio(右键单击图标 - >以管理员身份运行)