Может кто-нибудь объяснить параметр соединения `BypassPrepare`, используемый при построении ETL через SSIS и VS? - PullRequest
0 голосов
/ 11 декабря 2018

С Форумы MSDN:

Если для этого параметра установлено значение true, то подготовка (т. Е. Синтаксический анализ) выполняется ядром базы данных, к которому вы подключаетесь.Если для этой опции задано значение false, то подготовка выполняется пакетом служб интеграции.
Эта опция доступна только для соединений типа OLEDB и была введена , поскольку pacakge (задача sql) не может подготовить / проанализировать все команды SQL, которыеБаза данных OLEDB поддерживает. Это означает, что вы получите ошибку на этапе синтаксического анализа и не сможете выполнить оператор, который является допустимым оператором в базе данных OLEDB, но не может быть подготовлен / проанализирован задачей SQL.
~ Dean Savović

Я просто буду честен и скажу, что не понимаю этого ответа.Я работаю в сети и только (медленно) изучаю хранение данных.


Мой вопрос состоит из двух частей:
1. Когда Дин говорит «подготовить / разобрать», что происходит при разборе / подготовке?

2. Насколько я понимаю, OLEDB - это API.Сериализуются ли запросы к интерфейсу OLEDB?Если нет, то что помешает Visual Studio + SSIS отправлять строки, содержащие поддерживаемые команды?


Мне кажется, что я здесь упускаю что-то решающее в соединениях OLEDB.Я нашел еще 2 SO вопроса на эту тему, но оба получили ответы, попробывающие цитату выше.

1 Ответ

0 голосов
/ 11 декабря 2018

Прежде всего, важно помнить, что BypassPrepare является свойством задачи «Выполнение SQL», а не подключением к базе данных.

Свойство позволяет переключать проверку синтаксиса SQL во время разработки, которая можетбудет сделано для вас VS автоматически, когда вы создаете пакет.Если вы включите проверку и попытаетесь установить синтаксически неверный оператор SQL, редактор компонентов расскажет вам все, что он думает о вас в целом, и ваши навыки кодирования SQL в частности.

С отключенной проверкой синтаксиса,Вы можете добавить в задание абсолютно любую фигню, и ничего не произойдет, пока вы не попытаетесь ее выполнить.В этом случае у вас будет исключение времени выполнения.

Если вы, как и я, и многие другие разработчики, сначала придумываете свои операторы SQL в полноценном редакторе SQL, таком как SSMS или аналогичный, вы, вероятно, неНе нужно вообще трогать этот параметр и оставить эту проверку синтаксиса отключенной по умолчанию.

Другая проблема, связанная с этим свойством, заключается в том, что оно вызывает ложные тревоги каждый раз, когда вы пытаетесь сохранить параметризованный SQL.Я не уверен, правильно ли он работает с ADO.Net, но в случае, если параметры соединения OLEDB обозначены вопросительными знаками, а встроенная программа проверки синтаксиса, похоже, блаженно не знает об этой части функциональности компонента.

Если вы думаете, переключается ли SSIS на подготовленные операторы с этим свойством, установленным в False, AFAIK этого не делает.В ETL типичный запрос обычно выполняется один раз и захватывает либо большинство, либо все строки таблицы.Нет никакой выгоды, которую можно получить, подготовив такое заявление перед выполнением.Сказав это, я на самом деле могу ошибаться;для этого нужно только настроить трассировку Profiler / XEvents.

Мой совет: оставьте значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...