如果sql服务的启动用户默认为 local system, 使用Bulk Insert 命令从一个共享地址读取文件,会报如下错误:
"未能进行大容量插入,因为未能打开文件 '\\PC1\Dir1\1.txt'。操作系统错误代码 5(拒绝访问。)。"
我想问一下,有没有办法在不改变sql服务启动用户的前提下,读取这个文件。。

解决方案 »

  1.   

    exec master..xp_cmdshell 
    'net use \\PC1\Dir1 "密码" /user:PC1\administrator' 
    添加网络映射
      

  2.   

    网络映射 没用过 能不能给个例子啊
    下边是我的代码
    CREATE TABLE [#DATA] ([LINE_DATA] [VARCHAR] (8000),) exec('BULK   INSERT   #data  FROM  ''\\172.20.2.101\Share\tt.txt''  WITH ( FIELDTERMINATOR = ''\n'', ROWTERMINATOR = ''\n'' )') select * from #DATA drop table #DATA
      

  3.   

    exec master..xp_cmdshell 'net use \\172.20.2.101\Share "密码" /user:172.20.2.101\administrator' exec('BULK INSERT #data FROM ''\\172.20.2.101\Share\tt.txt'' WITH ( FIELDTERMINATOR = ''\n'', ROWTERMINATOR = ''\n'' )') 
     
    exec master..xp_cmdshell 'net use \\172.20.2.101\Share /delete' 
    select * from #DATA drop table #DATA
      

  4.   


    这里边的administrator和密码是172.20.2.101的用户名和密码吗?
      

  5.   


    恩,,,不一定是administrator能独这个文件的内容就可以
      

  6.   


    exec master..xp_cmdshell 'net use \\172.20.2.101\Share "密码" /user:172.20.2.101\administrator' CREATE TABLE [#DATA] ([LINE_DATA] [VARCHAR] (8000),)  
    exec('BULK INSERT #data FROM ''\\172.20.2.101\Share\tt.txt'' WITH ( FIELDTERMINATOR = ''\n'', ROWTERMINATOR = ''\n'' )') 
     
    exec master..xp_cmdshell 'net use \\172.20.2.101\Share /delete' 
    select * from #DATA drop table #DATA
      

  7.   

    CREATE TABLE [#DATA] ([LINE_DATA] [VARCHAR] (8000),)你的多了,
      

  8.   

    不多吧,不建立这个临时表的话, BULK INSERT #data FROM  不久出错了吗
      

  9.   

    sql服务的启动的默认用户: local system,对共享文件竟然没有读取的权限,不理解为啥?不知道这个默认的用户都有些什么权限。。
      

  10.   

    准确的说, LOCAL SYSTEM 帐户没有访问网络资源的权限,在本地系统拥有最大的权限。