Я работал над проектом, который имел следующее требование:
TableA - родительская таблица.Когда бы ни обновлялись какие-либо дочерние записи таблицы А, поле «LastActivityDate» в таблице А должно обновляться с текущей датой UTC.
Теперь я знаю, что есть много способов сделать это.Мой пост НЕ о многих различных способах, которыми это может быть достигнуто.
Я первоначально предложил использовать триггеры для этого требования, и наши администраторы баз убили меня, потому что они не хотят триггеров в этой БД (я не знаюпочему, и это не важно для моего вопроса).Я закончил тем, что создал сохраненный процесс, единственной целью которого было обновить TableA.LastActivityDate.Затем я закодировал хранимые процедуры обновления / вставки дочерних элементов TableA для вызова этого хранимого процесса.Так, например, сохраненный процесс дочернего обновления будет выглядеть так:
Create Procedure TableB_UPD
(
@TableBId INT
@TableBName VARCHAR(30)
)
AS
BEGIN
UPDATE dbo.TableB
SET TableBName = @TableBName
WHERE
(TableBId = @TableBId)
DECLARE @TableAId INT
SELECT
@TableAId = TableAId
FROM
dbo.TableB
WHERE
(TableBId = @TableBId)
EXEC dbo.TableA_LastActivityDate_UPD @TableAId
END
Это довольно простой код, я называю хранимый процесс dbo.TableA_LastActivityDate_UPD из хранимого процесса TableB_UPD.Когда наши администраторы увидели это, они отказались разрешить это в своей базе данных.Они сказали мне, что при вызове хранимой процедуры внутри хранимой процедуры наблюдается огромный скачок производительности.Мне не удалось найти хороших онлайн-статей, подтверждающих это утверждение (и администраторы баз данных тоже не смогли мне их дать).
Я видел такой код во многих базах данных и никогдаслышал о каких-либо проблемах с производительностью до сих пор.У меня такой вопрос: может кто-нибудь объяснить проблемы с производительностью вокруг этого типа кода?Я был бы очень признателен за ссылки на статьи.
Это в SQL Server 2005.