如何在 SQL Server 上找到 BCP?

问题描述 投票:0回答:3

我正在创建一个代码库,该代码库将部署在企业环境中的数十个 Sql Server 上。 SQL Server 的版本大多为 2008,但也存在一些 2000、2005 和 2008R2 实例。它们也在 Windows Server 2000-2008 的各种版本上运行。我需要能够找到要从此库中的 C#.NET 代码中调用的 BCP 的 Sql Server 版本。

我不能依赖默认安装目录,因为许多服务器没有在默认目录位置安装 Sql Server。

我也不能依赖 PATH 变量,因为许多服务器还安装了 Sybase 驱动程序,该驱动程序有自己的 BCP 版本(它不支持我们使用的许多 BCP 调用的 queryout 命令),并且我们已经依赖 PATH 环境变量返回 Sybase 位置而不是 Sql Server 位置时出现问题。

任何人都可以提出一个解决方案,让我在考虑到不同的版本和约束的情况下轻松找到这些服务器上的 BCP 位置吗?

编辑:

我曾考虑过使用 SQLBulkCopy,但这是为了支持跨多个数据库和存储过程的大量现有 BCP 调用。现在,它们都调用现有的存储过程,该存储过程存在于每个服务器上的公共数据库中,并且在该存储过程中,模拟调用然后使用其提升的权限来调用 xp_cmdshell。出于安全原因,我们希望删除 xp_cmdshell 部分。我们希望将其替换为 CLR 存储过程,该存储过程会查找 BCP,然后传入参数,以便其他人无法轻松地使用该进程来访问 cmd shell。

BULK INSERT 在我们的环境中也不起作用,因为安全权限的设置方式很奇怪,而且出于某种原因,他们还没有弄清楚,BCP 无法处理不在同一物理盒子上的文件位置。另外,我们的大多数 BCP 调用都是创建文件,而不是导入文件。

.net sql-server bcp
3个回答
0
投票

想法...

  • 您可以使用 .net 中的 SQLBulkCopy 吗?
  • 或者从 .net 运行 SSIS?
  • 或在 SQL 中批量插入

这么说,就可以找到路径了

当然,您的调用帐户需要 SQL 权限或远程读取注册表的权限。使用SQL意味着使用SQL服务帐户可以看到它自己的注册表项

Google 上也有很多“查找 SQL Server 安装路径”的结果(我在上面选择了两个)


0
投票

您能在服务器注册表中找到您需要的大部分内容吗?

我知道以下注册表路径包含大量信息,包括路径和版本。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\

或在 64 位系统上:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

有关 Wow6432Node 的信息,请参阅 这个问题


0
投票

对于我安装的 SQL Server 2022,BCP 的路径是:

C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\bcp.exe

© www.soinside.com 2019 - 2024. All rights reserved.