Разрушение SQL-скрипта - PullRequest
3 голосов
/ 03 июня 2009

Я пишу довольно длинный SQL-скрипт, который работает около 2000 строк кода. Поскольку становится действительно трудно понять длинный сценарий, я хотел бы разбить его на логические единицы и разделить на другие файлы SQL.

Каков наилучший способ сделать это? Должна ли каждая логическая единица быть хранимой процедурой? может быть UDF?

Ответы [ 6 ]

2 голосов
/ 03 июня 2009

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

При этом, если ваш скрипт такой длинный, вы можете взглянуть на то, что вы делаете, и подумать о другом языке сценариев или даже C # / LINQ. Иногда имеет смысл сохранить все это в SQL, а иногда вы вводите что-то в SQL, но только вы можете сделать это определение.

Кроме того, C # или другой язык сценариев легко интегрируется с системой контроля версий. Просто о чем подумать!

0 голосов
/ 03 июня 2009

разбейте его на несколько sps, добавьте блоки try-catch и обработку ошибок (помните, деление на 0 не является ошибкой, которую можно отследить), и настройте задание для последовательного выполнения каждого.

0 голосов
/ 03 июня 2009

Похоже, много кода для одной партии.

Разбейте каждый логический шаг / процесс (т.е. создайте заказ / отправку заказа / зарегистрируйте клиента) на отдельную хранимую процедуру. Возможно, вам будет полезно создать диаграмму потока процессов и использовать ее, чтобы помочь разобраться, где разбить ваш пакет кода T-SQL.

Если вы пытаетесь выполнить вычислительную логику с использованием T-SQL, переместите такие операции в управляемый код, такой как функции CLR и т. Д.

0 голосов
/ 03 июня 2009

То, что вы используете, чтобы разбить его, может варьироваться в зависимости от того, что вы делаете.

Это похоже на любой язык программирования, реклама скриптов / функций становится слишком большой, необходимость разбивать.

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

Хранимые процедуры и пользовательские функции - это еще один хороший способ, в зависимости от того, что делает ваш код.

0 голосов
/ 03 июня 2009

Если вы используете UDF, убедитесь, что вы знаете разницу между скалярными и встроенными:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/05/23/reuse-your-code-with-cross-apply.aspx

0 голосов
/ 03 июня 2009

Во-первых, 2000 строк SQL - это не слишком большое количество в файле (DDL часто запускает это много или больше для скромно большой базы данных). Тем не менее, это слишком много, чтобы иметь в одном процессе! Путь к этому действительно состоит в том, чтобы разбить логические компоненты на отдельные процедуры. Если у вас нет определенного узкого места для преодоления или операций, которые нелегко выполнить в SQL, тогда вам не понадобятся пользовательские функции.

Последнее слово: подумайте об упрощении доступа к данным через Views.

Кстати: что вы пытаетесь достичь с таким большим процессом? Я выполняю огромный объем работы с использованием T-SQL, и я никогда не подходил близко к 2000 строкам кода!

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