У нас есть приложение для обновления, которое выполняет сценарии SQL из более чем 30 000 строк кода в базе данных SQL Server. В этом скрипте большое количество операторов GO
. Компоненты ADO, к которым я привык, не поддерживают оператор GO
. Мы всегда использовали командную строку OSQL
при обновлении сервера, что сложно для обнаружения проблем (выводит текстовый файл, который мы затем должны анализировать для поиска ошибок и результатов). Было бы намного лучше, если бы что-то в Delphi могло находить эти GO
оператора и выполнять каждый блок за раз.
Я понимаю, что оператор GO
относится к инструментам MS, которые могут их выполнять. Опять же, сценарий состоит из более чем 30 000 строк кода, по крайней мере, с 500 операторами GO
. Мы используем один и тот же сценарий в SQL Management Studio и OSQL для средства обновления. Но OSQL просто не дает нам нужных результатов — это неаккуратный способ выполнения такого сценария.
Существует ли какой-либо инструмент, совместимый с SQL Server для Delphi, который распознает операторы GO
? Я не говорю обязательно о синтаксическом анализаторе (хотя я уверен, что синтаксический анализ будет задействован), я говорю о готовой утилите для выполнения сценариев SQL, которые содержат операторы GO
и возвращают результаты каждого блока сценария.
Например, один блок может создать таблицу, затем GO
, а затем создать хранимую процедуру для этой таблицы и еще GO
. Код настолько сложен, что реализация его в коде, подобном совершенно исключено.
ОБНОВЛЕНИЕ
Я успешно написал небольшой рабочий код, который делает это, однако он не принимает во внимание оператор GO
в блоке комментариев.
Я больше ничего не спрашиваю в этом вопросе, просто подумал, что поделюсь, где я с этим.
GO
тоже не сработает, потому что там, вероятно, есть строка, которая вставляет/обновляет некоторый текст со словом go - person Jerry Dodge   schedule 08.08.2013GO
сам по себе непостоянен. Вы можете, например.configure your own batch terminator
в Management Studio, чтобы вы могли сгенерировать скрипт с разделителемGOJOHNNYGO
, например. - person TLama   schedule 08.08.2013TADScript
или, например, UniDAC за егоTDAScript
. Поэтому я думаю, что ваш вопрос также зависит от того, какие компоненты вы можете использовать. - person TLama   schedule 08.08.2013here
в комментарии; использование комментария SQL, такого как/*GO*/
, написанного в 3 строки, где только этоGO
будет единственным словом в одной строке, но внутри комментария скрипта. - person TLama   schedule 08.08.2013USE
... - person Jerry Dodge   schedule 08.08.2013USE
является обычным оператором, аGO
— нет. Во всяком случае, просто чтобы добавить об этих исполнительных компонентах сценария; они также сами разбирают скрипт вручную. - person TLama   schedule 08.08.2013