У меня есть таблица Visual FoxPro, к которой мне нужно получить доступ с Sql Server. В Sql Server x86 я бы просто создал связанный сервер. К сожалению, для VFP нет драйвера x64 - поэтому Sql Server x64 не может создать связанный с ним сервер.
До сих пор я придумал следующие варианты - ни один из которых мне особенно не нравится:
- Настройте сервер x86 Sql для использования в качестве ретранслятора, чтобы запросы отправлялись из x64 -> x86 -> VFP.
Меня это не особо волнует, поскольку помимо того, что я dev, я также являюсь системным администратором. Таким образом, это означает, что мне нужно исправлять, поддерживать и отслеживать еще один сервер Sql - и, возможно, еще один сервер (при условии, что я не просто использую отдельный экземпляр).
Кроме того, поскольку поставщик VFP не работает с синтаксисом из 4 частей, я должен использовать OPENQUERY. Думая обо всех экранирующих одинарных кавычках, которые должны были произойти, чтобы оператор OPENQUERY был встроен в другой оператор OPENQUERY, у меня кружится голова ...
- Создайте табличную функцию с CLR, хотя сборка будет (предположительно?) Также x64 - так что мне придется выйти из proc (IPC? Webservice?) Для фактического выполнения запросов
Оказывается, что для TVF требуется схема, поэтому этот параметр не так чист, как я изначально думал. Я сделал пайк, чтобы включить WCF-клиента в MSSQL, который возвращает один столбец XML, который затем можно проанализировать с помощью функций типа данных Sql XML. Это работает, и на самом деле запрос немного лучше, чем OPENQUERY, поскольку он фактически принимает переменные в качестве параметров. Это экономит мне большую часть одиночной цитаты и танца EXEC.
Конечно, WCF внутри Sql полностью не поддерживается и пахнет как довольно большой взлом. У меня довольно серьезные сомнения по поводу производительности и надежности.
- Прекратите делать запросы с Sql Server на VFP и перепишите хороший кусок клиентского кода
Очевидно, это «правильный» ответ. Но существует много клиентского кода, основанного на соединениях между таблицами Sql Server и таблицами VFP. Переписать этот материал, чтобы заполнить временную таблицу или выполнить соединения на стороне клиента, кажется довольно большим бременем.
Здесь мы надеемся, что кто-то может предложить лучшую альтернативу или что-то подобное.