Sybase BCP 与 MS SQL BCP

Sybase BCP vs MS SQL BCP

我有一个我需要使用的多数据库设置,它们都有自己的 bcp 版本,它们的行为方式不同。另外,两者都在我的 %PATH% 中,Sybase 的在 MS SQL exe 之前列出,因此从命令行调用 "bcp" 总是会命中 Sybase exe。

首先,版本是"different":

Sybase BCP: Sybase CTBCP Utility/15.0/P-EBF17890 ESD #24/PC Intel/BUILD1500-123/OPT/Thu 2010 年 5 月 13 日 02:45:43 (对于 Adaptive Server Enterprise/15.7/EBF 23008 SMP SP130 /P/RS6000/AIX 6.1/ase157sp13x/3819/64-bit/FBO/Sat 2014 年 8 月 23 日 02:49:06)

MS SQL BCP: 版本:11.0.2100.60 (查询命中 SQL 2008 R2 和 2012 SP3 数据库)

他们绝对不会以相同的方式处理文件的输出,每个文件的文档都表明了这一点。我在 bcp 上读到的所有内容都说 bcp 在 Sybase 和 MS SQL 之间应该工作相同,但我必须调用完整的 MS SQL bcp.exe 路径来调用 MS SQL 因为Sybase bcp不支持同样的queryout。

我的进程使用批处理脚本调用多个查询,这些查询命中 Sybase DBS,然后调用 MS SQL 数据库将数据输出到暂存数据库,我是否总是必须区分 Sybase 和 MS SQL bcp 或我可以只使用一个没有问题吗?如果是这样,请使用 "right" 中的哪一个(不要试图在这里引发关于哪个更好的争论)。此外,我没有看到任何迹象表明版本号有任何关系,所以知道哪个是 "latest" 并且使用那个被证明是困难的。

请记住,MS SQL Server 与 1994 年的 Sybase ASE 相同(称为 Sybase SQL Server),但在那之后,它们慢慢开始分开。所以BCP的概念还是有的,而且大同小异,只是细节不同而已。 一方面,不要指望能够为这些数据库交换客户端工具:Microsoft 对 TDS 协议进行了更改,这使得无法将客户端连接到其他供应商的数据库。

如果两个同名的可执行文件发生冲突,常见的解决方案包括 (i) 明确指定可执行文件的路径名 (ii) 在调用一个或另一个可执行文件之前设置正确的环境变量 (iii)重命名其中一个可执行文件。 YMMV.