Мое приложение состоит из основной книги Excel WB и любого количества клиентских книг Excel. Все они содержат отчеты, управляемые запросами SELECT QUERY, управляемыми подключениями данных Excel к серверу SQL через SQLOLEDB, а теперь и MSOLEDB SQL. Эти ЗАПРОСЫ на SQL сервере включают данные из главного WB, к которому SQL Server обращается через Microsoft.ACE.OLEDB.12.
Главный WB также создает хранимые процедуры на SQL сервере, используя DROP ПРОЦЕДУРА и СОЗДАТЬ ПРОЦЕДУРУ, SQL которой настроен на основе данных в Excel. Отчеты в клиентских базах данных управляются подключениями к данным, которые EXE C эти SP. Таким образом я могу «скрыть» файловые структуры данных, полученных из Excel, а также предоставить единую точку управления SP SQL. Я полагаю, что это обычная структура.
Все это работало довольно хорошо примерно до прошлого года, 2019 года. Исследования показывают, что Excel сломал это в версии 1907. Мы уже далеко за пределами этого, я в версии 2004. Теперь все SELECT по-прежнему работают, а EXEC работают до тех пор, пока они вызывают SELECT в SP. Но DROP и CREATE из главного WB больше не работают, и вызов EXE C из Excel для вызова SP для выполнения DROP или CREATE также не работает.
Другие столкнулись с похожими проблемами:
Обсуждение в Microsoft Tech Community показывает, что это было неработающим в Excel версии 1906 и исправленным в 1908 , но я не нашел его, чтобы исправить мою конфигурацию. (Для справки найдено перечисление версий Excel ; я использую версию 2004 Office 365 ProPlus / Microsoft 365 Apps для предприятия) (Другая информация о конфигурации: Win10 Pro, SQL Server Express 2019 , Visual Studio Community 2019, все x64);
Еще одно обсуждение в сообществе Microsoft Tech Community по Отключение предупреждений в Native SQL QUERYs кажется полезным, но не решение само по себе. Также обсуждается StackOverflow ;
Обсуждение в сообществе Power BI показывает, что после Native SQL QUERY с «SELECT 1 FROM someExistingTable» решает проблему. Я обнаружил, что это тоже полезно, но само по себе это не решение.
Я обнаружил, что могу заставить ПРОЦЕДУРУ ОТДАЧИ работать, если у меня есть
Disabled Native SQL QUERY Warnings, как указано выше;
После оператора DROP следует оператор SELECT 1 ..., как указано выше;
И построитель соединений в Excel теперь вынуждает меня подключиться к таблице в Excel, даже если SQL в соединении не возвращает данные (например, DROP или CREATE). Даже если я не выбираю таблицу при определении соединения, я должен назначить соединение таблице в Excel при выходе из построителя. Я ненавижу это, но это заставляет DROP работать. Я повторно использовал одно соединение данных для DROP и CREATE и для выполнения некоторых EXEC, обновляя текст команды SQL с помощью VBA до соответствующего SQL по мере необходимости.
Однако ... Даже со всеми этими небольшими обходными путями CREATE PROCEDURE по-прежнему не работает. Итак, я ищу помощь в том, как заставить собственный SQL ЗАПРОС для СОЗДАНИЯ ПРОЦЕДУРЫ работать в текущей версии Excel.
Если есть более широкий совет и взгляд на командно-ориентированный (т. Е. Не возвращающий данные) Собственные запросы SQL QUERY в подключениях к данным Excel, это тоже интересно! Спасибо.