Какой-либо вред в использовании BEGIN / END для организации кода SQL? - PullRequest
0 голосов
/ 20 сентября 2018

Я не совсем привык писать очень длинные СП.И я обнаружил, что быстро работать с этими широкими таблицами стало очень сложно.Даже простой UPSERT будет занимать очень длинную строку или десятки строк кода (я считаю, что стиль col / line легче читать для меня, но работа с этими очень широкими таблицами действительно доставляет мне боль).Постепенно я начал использовать BEGIN / END, чтобы обернуть эти UPSERT-ы и другие базовые операции в одну таблицу и т. Д., Чтобы сгруппировать их в логические разделы.Чтобы в IDE их можно было легко складывать и раскладывать, проверять и просматривать с комментариями.Примечание: я не пишу их для каких-либо блоков управления.Просто просто НАЧАЛО / КОНЕЦ, чтобы обернуть их в складную секцию.

Приведет ли добавление нескольких дополнительных НАЧАЛО / КОНЕЦ к группе и сложить / развернуть код lenthy к любому побочному эффекту?В настоящее время я еще не вижу ... Если так, то кем они могли быть?Есть ли лучший способ упорядочить этот код в SP?

Да, сворачивая, я имею в виду

CREATE PROCEDURE/MULT_STATEMENT_FUNCTION
...
BEGIN
-- UPSERT QC records
    BEGIN
        UPDATE QC_SECT1 <-- fold[]
        SET COL1=...
            COL2=
            .....
        IF @@ROWCOUNT.... <--fold[ click 1]
        INSERT INTO ... <-Fold[click 2]
        (
            COL1
            ....
        VALUES          <-Fold[click 3]
        (
            ...
    END
    -- calculate distribution
    BEGIN
    DECLARE @GRP1_.....
    DECLARE @GRP2_....
    WITH .....
    ....
    ) AS PRE_CAL1  <-- fold[click 1]
    ) AS PRE_CAL2  <-- fold[click 2]
    ) AS ...       <-- fold[click 3] 
    END
END

Мне показалось очень неудобным проверять длинные скрипты, Постепенно я начинаю использовать BEGIN/КОНЕЦ.В VSCode требуется много кликов, чтобы сложить одну инструкцию CTE.BEGIN / END сделали это намного проще.Но я действительно хочу убедиться, что я делаю что-то не так.

PS: Группировка столбцов по идеям строки очень правильная, я полностью согласен.Относительно стиля col / line.Не то, чтобы я действительно это любил.Но я думаю, что в моей нынешней ситуации многие люди, вероятно, тоже предпочтут это.Широкие таблицы в db vendor имеют длинный префикс, я бы сказал, для группировки столбцов.перечисление их по вертикали помогает выровнять их, чтобы их можно было легче исказить ... Я полагаю, в настоящее время у меня есть особый случай.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Нет, абсолютно нет.Нет никакого вреда в обертывании блоков кода в блоки BEGIN / END.Я делаю это более 10 лет без последствий.Оптимизатор в основном игнорирует его, если только нет причины оценивать логику BEGIN / END (например, для цикла или другого условия «WHILE»).

Использование блоков кода BEGIN / END в SSMS позволяет быстро свернуть/ расширить большие блоки кода.Ниже приведен код, над которым я только что работал для сбора рутинных метаданных.Это 110 строк кода, но легко читаемый.

enter image description here

0 голосов
/ 20 сентября 2018

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

Мне показалось, что стиль col / line легче читать для меня

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

...