2016-02-25 25 views
0

我已经经历了许多其他问题,并且他们没有通过具体问题回答。我了解它期望该文件存在于SQL服务器中的错误。在CSV文件的批量加载期间发生SQL Server 2012权限问题

我已经在我的笔记本电脑安装了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

+0

确保您将文件放在服务器和提服务器路径 –

+0

您使用什么命令来执行批量加载? – eliah

回答

1

SQL Server需要权限的CSV文件居住在文件夹中。

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

Here is how to configure permissions on Windows folders

SQL Server Permissions

+0

谢谢。将尝试通知。 – Morpheus

+0

我想我被卡住了在您发布的链接的第5步找不到的名称。我无法搜索该服务NT SERVICE \ MSSQLSERVER – Morpheus

+0

有一种更优雅的方式来做到这一点,我确信但要这样做:转到SQL Server安装目录,右键单击DATA文件夹并检查权限在上面。这将告诉你安装SQL Server的帐户。也可能是您使用快递的问题。我从来没有使用它,所以我不知道它在这方面的行为是否有所不同 – Brandon

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. 该文件必须损坏或您的代码不正确:在这种情况下,尝试用记事本++或任何编辑器手动打开文件。如果你可以打开文件,然后看到FIELDTERMINATOR,在这里我使用昏迷(,)。一些时间vertical var(|)用于分隔数据。所以如果你需要改变它。

Anothe重要的是,尝试运行SQL Server 2012 Management Studio中作为管理员(righr单击该图标 - >以管理员身份运行)