SQL Server中的bcp错误

3

我已经在SQL Server 2005中创建了一个存储过程,用于将查询结果导出到网络路径。该用户是SQL用户,并且也已在AD中创建。我登录的服务器是远程服务器,具有sysadmin特权。执行该存储过程或查询时,我遇到了以下错误:

output
SQLState = 08001, NativeError = 53
Error = [Microsoft][SQL Native Client]Named Pipes Provider: Could not open a connection to SQL Server [53]. 
SQLState = 08001, NativeError = 53
Error = [Microsoft][SQL Native Client]An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.
SQLState = S1T00, NativeError = 0
Error = [Microsoft][SQL Native Client]Login timeout expired
NULL

在我登录服务器并执行查询时,似乎我无法访问远程服务器。该过程还会在凌晨01:30自动执行。所执行的命令是bcp命令:

DECLARE @SQLCommand     [varchar](max)
       ,@Query          [varchar](max)
       ,@SERVER         VARCHAR(1000)
SET @Query = 'SELECT * FROM INFINITY_SYSTEM.[dbo].[CTI_WFM_LILO_View]'
SET @SERVER = '[server_name]'
SET @SQLCommand = 'EXEC xp_cmdshell ''bcp "' + @Query + '" queryout "\\network_path\lilo'+CONVERT(VARCHAR,GETDATE(),112)+'.csv"  -Uusername -Ppassword -c -t, -r, -S"'+@SERVER+'"''' --also tried with -T in stand of the -Uusername -Ppassword
EXEC (@SQLCommand)

当我尝试将该命令从本地sqlserver的本地数据库复制到相同路径时,它可以正常工作。

谢谢。


1
我用两种方法解决了这个问题:1. 在批处理文件中使用sqlcmd命令{sqlcmd -S "server" -U user -P passowrd -d database-Q "SET NOCOUNT ON SELECT * FROM INFINITY_SYSTEM.[dbo].[CTI_WFM_LILO_View] SET NOCOUNT OFF" -o "D:\lilo1.csv" -h -1 -s ","},并创建一个SQL作业来执行它;2. 我创建了一个C#控制台程序来进行导出,然后创建了一个定时服务器作业来运行它。 - g_brahimaj
1个回答

0

确保您可以通过telnet连接到远程服务器。我还建议尝试通过sqlcmd连接到远程服务器。您可能有防火墙阻止了连接。此外,SQL Server服务需要对共享/目录具有权限,以便您可以将文件写入其中。

另一件您应该考虑的事情是使用SSIS包将数据导出到远程共享。通常不建议使用xp_cmdshell导出数据。您可以通过简单的SSIS包完成您想要做的所有操作。作为额外的好处,这也最小化了安全风险,因为您可以禁用xp_cmdshell。


防火墙没有问题,而且我拥有的版本中没有安装SSIS包。由于公司政策,我无法进行安装。 - g_brahimaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接