Как найти BCP на SQL Server?

Я создаю библиотеку кода, которая будет развернута на нескольких десятках серверов Sql в корпоративной среде. Версии SQL Server в основном 2008 года, но также существуют экземпляры 2000, 2005 и 2008R2. Они также работают на различных версиях Windows Server 2000-2008. Мне нужно иметь возможность найти версию BCP для Sql Server, которая будет вызываться из кода C#.NET в этой библиотеке.

Я не могу полагаться на каталог установки по умолчанию, потому что на многих серверах Sql Server не установлен в каталогах по умолчанию.

Я также не могу полагаться на переменную PATH, потому что на многих из этих серверов также установлены драйверы Sybase, у которых есть собственная версия BCP (которая не поддерживает команду queryout, которую мы используем во многих вызовах BCP), и у нас были проблемы с опорой на переменную окружения PATH, возвращающую местоположение Sybase, а не местоположение сервера Sql.

Может ли кто-нибудь предложить решение, которое позволило бы мне легко найти местоположение BCP на этих серверах с учетом этих несопоставимых версий и ограничений?

РЕДАКТИРОВАТЬ:

Я думал об использовании SQLBulkCopy, но это для поддержки набора уже существующих вызовов BCP во множестве баз данных и хранимых процедур. Прямо сейчас все они вызывают существующую хранимую процедуру, которая существует в общей базе данных на каждом сервере, и в этой хранимой процедуре олицетворенный вызов затем использует свои повышенные привилегии для вызова xp_cmdshell. Мы хотим избавиться от части xp_cmdshell из соображений безопасности. Мы хотим заменить его хранимой процедурой CLR, которая находит BCP, а затем передает параметры, чтобы кто-то не мог использовать процесс на месте для получения доступа к оболочке cmd почти так же легко.

BULK INSERT также не работает в нашей среде из-за странного способа настройки разрешений безопасности, и по какой-то причине они еще не разобрались, BCP не может работать с местоположениями файлов, которые не находятся в одном физическом ящике. Кроме того, большинство наших вызовов BCP создают файлы, а не импортируют их.


person BBlake    schedule 17.06.2011    source источник


Ответы (2)



Сможете ли вы найти большую часть того, что вам нужно, в реестре серверов?

Я знаю следующий путь реестра, который содержит много информации, включая пути и версии.

HKLM\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\Microsoft SQL Server\

или в 64-битной системе:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

Для получения информации о Wow6432Node см. этот вопрос

person Jeff Sheldon    schedule 17.06.2011
comment
Я на 64-битной машине, я бы предположил, что на 64-битной машине будет 64-битный SQL Server. Поэтому нет необходимости в Wow6432Node. - person Jeff Sheldon; 17.06.2011