【问题标题】:Execute BCP from remote machine从远程机器执行 BCP
【发布时间】:2019-06-04 16:04:24
【问题描述】:

我有一台带有 sql 数据库和 manager studio 的服务器和另一台服务器,我想从中执行 bcp 命令。我可以使用(可能是.bat 文件)在同一台服务器上生成.txt 文件吗?或者有人有其他建议吗?这是给一个对BD一无所知并且想随时执行的人,所以我没有使用预定的工作。

我尝试了以下方法,它在第二台服务器上不起作用,但在第一台服务器上显示了预期的结果。

DECLARE @SQL VARCHAR(255), @bcpc VARCHAR(8000)
SET @SQL = 'select * from BaseDatos.dbo.tabla'

SET @bcpc = 'bcp "' + @SQL + '" queryout'
SET @bcpc = @bcpc + ' c:\test\archivo.txt -c -t"|" -Usa -P'
EXEC master..xp_cmdshell @bcpc

print @bcpc

【问题讨论】:

  • 附带说明,如果可以,请避免使用 xp_cmdshell。它引入了安全风险。如果对 xp_cmdshell 的访问不受限制(应该完全禁用),任何可以执行的人都将作为用于运行 SQL Server 服务的帐户执行其操作系统命令。现在是转移到 SSIS 包以处理数据库解决方案中任何需要的操作系统命令的好时机。仅供参考。
  • @jamie 谢谢,我去看看

标签: sql sql-server bcp


【解决方案1】:

您正在构建的 bcp 命令不包括用于指定从哪个 SQL Server 获取数据的 -S 选项。我相信,如果它在您的“服务器 A”上运行,这是因为 BCP 必须默认为本地默认实例。但是,当您尝试在“服务器 B”上运行 BCP 命令时,您不再拥有相同的默认 SQL Server 实例(如果您有的话)。尝试在 BCP 命令中添加 -S 选项以指定“服务器 A”的名称。

如果不使用 -S,我会仔细检查“默认”服务器值。

是的……

-S server_name [\instance_name] 指定要连接的 SQL Server 实例。如果未指定服务器,则 bcp 实用程序 连接到本地计算机上的默认 SQL Server 实例。 此选项是必需的,当从远程运行 bcp 命令时 网络上的计算机或本地命名实例。连接到 服务器上 SQL Server 的默认实例,仅指定 server_name。 要连接到 SQL Server 的命名实例,请指定 服务器名称\实例名称。

【讨论】:

  • 我做了更改,但仍然没有创建文件
  • 使用您在服务器 B 上构建并使用“xp_cmdshell”在 SQL Server 中执行的命令,将该命令复制并粘贴到 DOS 命令窗口中,然后直接在操作系统中执行 bcp 语句让我们暂时消除 SQL Server。该命令是否自行运行?你能分享存储在@bcpc 中的命令吗
  • 直接在DOS下运行bcp命令的执行结果是什么?
  • 你是对的,有错误!如果在服务器 2 中执行 -> bcp "select * from BaseDatos.dbo.tabla" queryout c:\test\archivo.txt -c -T -t"|" -S DESKTOP-JCB5\WIND_ION SQLState = 28000, NativeError = 18452 错误 = [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]登录失败。登录来自不受信任的域,不能用于集成身份验证。
  • 您有一个网络障碍需要解决。这不再是纯粹的 SQL Server 主题了 :(
【解决方案2】:

怎么样

EXECUTE (master.xp_cmdshell@bcpc) AT server2

如果你没有得到结果:

1) Basedatos.dbo.tabla 在服务器 2 上吗?如果没有,请创建一个链接服务器,以便您可以引用 server1.basedatos.dbo.tabla 以便在服务器 2 上运行的 BCP 从服务器 1 获取数据

2) 检查服务器 2 上的所有权限。

【讨论】:

  • Basetos 数据库是否在第二台服务器上?如果没有,您需要创建一个连接回服务器 1 的链接服务器,并调整您的 SQL 以包含链接服务器。
  • 不行,第一个服务器有DB,第二个是通过网络连接的..我会试试这个配置,我可以在manager studio中做吗?
  • 是的,您可以在 SSMS 中执行此操作。您需要确保您的帐户在两台服务器上都具有权限,并且在链接服务器定义中 RPC=Yes。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多