Bra*_*don 11 sql-server permissions bcp sql-server-2014 xp-cmdshell
我有一个存储过程,它每隔一段时间运行一次作业,以 BCP 处理我编写的应用程序留下的一些文件。
我注意到文件堆积如山,而 BCP 没有提取它们,因此我使用以下命令在 Management Studio 中进行了测试:
DECLARE @sql VARCHAR(MAX)
DECLARE @path VARCHAR(512) = 'C:\BCPFiles\'
--Use BCP to copy files in character format from the target directly into the table.
SET @sql = 'bcp [MyDB].[dbo].[MyTable] in ' + @path + 'bcpFile.dat -c -T'
EXEC master..xp_cmdshell @sql
Run Code Online (Sandbox Code Playgroud)
并收到此错误消息
使用相同的命令从同一台服务器上的命令行执行没有问题。
以下是其他一些观察结果:
EXEC master..xp_cmdshell 'dir C:\*.*'
并且结果按预期返回。NT SERVICE\MSSQLSERVER
对目录具有完全控制权限。任何帮助表示赞赏。
Sti*_*ing 11
我刚刚让你的代码在我这边工作。
尝试这个:
选项 A
选项 B
或者,只是为了克服以下错误,请尝试:
Error = [Microsoft][ODBC Driver 11 for SQL Server]Unable to open BCP host data-file
Run Code Online (Sandbox Code Playgroud)
在命令行类型上(创建一个虚拟文件——是的,会出现导入错误,但只是为了避免打开文件......)
echo .> c:\bcpfiles\bcpfile.dat
在 SQL Server Management Studio 中重新运行查询
如果选项 A 有效,则是权限问题。如果选项 B 有效(克服了原始错误),那么您有一个打开的文件——即使它似乎没有打开。有一些实用程序可以帮助找到这些打开的文件,但一种廉价且简单的测试方法就是重新启动服务器——希望它是一个开发/测试盒。