3

我在 sql server 2005 中创建了一个存储过程,用于将数据从查询导出到网络路径。用户是sql用户,也是在AD中创建的。我登录的服务器是远程服务器,具有系统管理员权限。我在执行过程甚至查询时遇到以下错误:

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 中的本地数据库尝试到同一路径时,该命令有效。

谢谢

4

1 回答 1

0

确保您可以远程登录到远程服务器。我也会尝试通过 sqlcmd 连接到远程服务器。您可能有防火墙阻止了连接。此外,sql server 服务将需要共享/目录的权限,以便您向其中写入文件。

您应该考虑的另一件事是使用 SSIS 包将数据导出到远程共享。通常使用 xp_cmdshell 导出数据并不是一个好习惯。你可以通过一个简单的 SSIS 包来做你想做的所有事情。作为一个额外的好处,这还可以最大限度地降低安全风险,因为您可以禁用 xp_cmdshell。

于 2013-07-15T15:51:22.837 回答