Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
File TSQL和UNC路径_File_Tsql_Path_Sql Server 2008 R2_Unc - Fatal编程技术网

File TSQL和UNC路径

File TSQL和UNC路径,file,tsql,path,sql-server-2008-r2,unc,File,Tsql,Path,Sql Server 2008 R2,Unc,我不是TSQL的专家,所以请对我有耐心。所以最近我在本地服务器上使用SQLServer2008R2管理工作室在TSQL中做了一个项目。我当时正在从C:驱动器上的临时文件中读取文件,并将它们批量插入表中 然后我转到一个常规服务器,而不是我机器上的本地服务器 我花了一点时间才意识到,我不再能够访问我的本地计算机文件夹和文件,这导致了我的问题 我已经读到一个解决方案是在服务器上创建一个映射驱动器,但这不是我的选择 所以我的问题是我还有什么选择?我可以使用UNC路径访问我的文件或任何其他内容吗 我要访问

我不是TSQL的专家,所以请对我有耐心。所以最近我在本地服务器上使用SQLServer2008R2管理工作室在TSQL中做了一个项目。我当时正在从
C:
驱动器上的临时文件中读取文件,并将它们批量插入表中

然后我转到一个常规服务器,而不是我机器上的本地服务器

我花了一点时间才意识到,我不再能够访问我的本地计算机文件夹和文件,这导致了我的问题

我已经读到一个解决方案是在服务器上创建一个映射驱动器,但这不是我的选择

所以我的问题是我还有什么选择?我可以使用UNC路径访问我的文件或任何其他内容吗

我要访问的文件是以逗号分隔并以换行符结尾的常规文本文件


(我看到了一些与我类似的问题,但似乎有特定于服务器或特定于他们的特定问题。他们的问题也没有得到回答。)

实际上,映射驱动器也不会工作,因为默认情况下运行的帐户SQL(我记得是本地系统)将无法访问网络

因此,更可靠的方法是使用UNC路径,但还有更多!(当我需要跨服务器移动数据库备份和日志备份以进行镜像时,我已经多次这样做了)

怎么做

  • 在SQL server计算机和将承载共享的另一台服务器上,创建一个新用户(两台计算机上的用户名和密码相同)-假设您不使用AD。该用户不需要位于除用户组以外的任何组中,但在两台服务器上的名称必须相同,并且密码必须匹配

  • 在SQL server计算机上更改运行SQL server的帐户。这是在SQL server配置工具中完成的。不要试图通过windows服务自己执行此操作。选择您在上面的no 1中创建的用户。注意,您必须输入pw。在更改SQL后重新启动SQL,并验证SQL是否仍正常运行。它应该像以前一样运行,但是现在作为一个特定的用户运行,拥有该用户的所有权限(实际上非常有限,但至少用户可以访问网络资源)

  • 在远程服务器上,确保新用户对将承载您的共享的文件夹具有NTFS权限。可能是读/写,或者如果SQL只读取数据,则只是读取

  • 在远程服务器上,创建指向您为其设置权限的相应文件夹的共享。如果您使用的是共享权限,请确保新用户对共享也有权限(不仅仅是对驱动器上的NTFS)


  • 一旦所有这些都设置好了,您的SQL脚本只需使用指向远程共享的UNC路径,而且由于SQL是以“作为”有权访问该共享的用户的身份运行的,所以SQL将很好地看到这些文件

    如果要将这些文件导入远程SQL Server,则该服务器计算机必须具有对这些文件的访问权限。在该服务器计算机的本地驱动器上,或者在设置为可由该服务器计算机和在该计算机上运行SQL server引擎的用户帐户访问的共享上,情况就是这样。一个或另一个-没有任何“魔术”把戏,真的。@marc_不一定是服务器机器。SQL Server实例作为其运行的帐户,或者,如果是SQL代理任务,则是服务作为其运行或模拟的帐户。这可能是系统帐户,或者如果您遵循过去10年发布的SQL Server版本的最佳实践,则可能是您手动配置的帐户。@BaconBits:您是对的-但是还需要从服务器计算机到网络共享所在位置的物理网络连接-如果不是给定的,那你就走不远了。。。。