Передача ID:
Преимущество заключается в том, что вы упрощаете все интерфейсы для своих хранимых процедур.
Это облегчает кодирование. Если в итоге вы вызываете SP из нескольких мест, вам просто нужно использовать один параметр, а не загружать и передавать несколько параметров.
Передача n
Переменные:
Тогда выгода в том, что вы «отделяете» свои хранимые процедуры от таблицы хранения.
Это означает, что вы можете просто вызывать хранимые процедуры напрямую, без каких-либо данных в таблице. Это может быть полезно в будущем, если данные поступают по-новому, или для модульного тестирования и т. Д.
Что лучше:
Я не думаю, что есть прямой ответ на это, это скорее случай предпочтений и мнений.
Мое мнение таково: чем менее тесно связаны вещи, тем лучше. Он более гибок перед лицом изменений.
Я бы сделал это следующим образом ...
CREATE PROCEDURE main_by_variable @v1 INT, @v2 INT, ...
BEGIN
EXEC sub_part_1 @v1, @v3
EXEC sub_part_2 @v2
EXEC sub_part_3 @v2, @v3
...
END
CREATE PROCEDURE main_by_id @id INT AS
BEGIN
DECLARE
@v1 INT,
@v2 INT,
...
SELECT
@v1 = field1,
@v2 = field2
FROM
holding_table
WHERE
id = @id
EXEC main_by_variable @v1, @v2, ...
END
GO;
Имея процедуру main_by_variable
, вы получаете гибкость, такую как тестирование всех подпроцедур, без необходимости вводить какие-либо данные в таблицу хранения. И эта гибкость также является частью подпроцедур.
Но для удобства вы можете обнаружить, что использование main_by_id
более аккуратно. Так как это всего лишь оболочка для main_by_variable, все, что вы делаете, это инкапсулируете один шаг в процессе (извлечение данных из таблицы).
Это также позволяет вам разместить транзакцию вокруг части сбора данных и удалить данные из таблицы. Или много других вариантов. Он гибкий, а мне нравится гибкий.