Код запуска на столе в моей базе данных ERP - PullRequest
0 голосов
/ 23 марта 2010

Мой поставщик ERP имеет следующий триггер на столе:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[SOItem_DeleteCheck]
ON [dbo].[soitem]
FOR DELETE
AS 
BEGIN
    DECLARE @RecCnt int, @LogInfo varchar(256)

    SET @RecCnt = (SELECT COUNT(*) FROM deleted)

    IF @RecCnt > 150
    BEGIN
        RAISERROR (54010, 18, 1, 'SOItem') WITH LOG
        ROLLBACK TRANSACTION
    END

    SET @LogInfo = 'Deleting ' + LTRIM(STR(@RecCnt)) + ' Rows From SOItem'

    EXEC LogDeletes @LogInfo
END
GO

Это кажется мне очень неэффективным. Разве выбор счетчика (*) занимает больше времени, чем счетчик (конкретное поле)?

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Я думаю, что в прошлом было выгодно считать (1) против счетчика (*), и нас всех учили использовать этот подход, но на данный момент это больше стиль, чем производительность.

1 голос
/ 23 марта 2010

Честно говоря, даже если он медленнее, я могу запустить такую ​​выбранную запись менее чем за миллисекунду на моей самой большой таблице с миллионами строк, которые вряд ли удастся запустить. Нет реальной выгоды от его изменения. Мне любопытно, почему вы захотите откатить любую транзакцию с более чем 150 записями.

...