Что состоит в том, чтобы проверить самый портативный путь, существует ли триггер в SQL Server?

У меня была похожая проблема. Когда я создавал резюме в Angular, я хотел показать mat-horizontal-stepper, когда экран больше 700 пикселей, и mat-vertical-stepper, когда он меньше его. Поэтому я создал событие с HostListener по window:resize.

Это мое развернутое резюме, если вы измените размер, вы увидите ожидаемое поведение.

Вот как мои HTML с horizontalStepper, в строке 23 вы можете увидеть, что если значение истинно, показать что-то, в противном случае показать что-то еще.

И это файл TS моего компонента, в строке 36 вы можете найти HostListener.

48
задан Blorgbeard 23 January 2015 в 18:38
поделиться

3 ответа

Это работает на SQL Server 2000 и выше

IF OBJECTPROPERTY(OBJECT_ID('{your_trigger}'), 'IsTrigger') = 1
BEGIN
    ...
END

Обратите внимание, что наивное обратное не работает надежно:

-- This doesn't work for checking for absense
IF OBJECTPROPERTY(OBJECT_ID('{your_trigger}'), 'IsTrigger') <> 1
BEGIN
    ...
END

... потому что, если объект вообще не существует, OBJECTPROPERTY возвращает NULL , а NULL (конечно) не <> 1 (или что-то еще).

В SQL Server 2005 или более поздней версии вы можете использовать COALESCE , чтобы справиться с этим, но если вам нужно поддерживать SQL Server 2000, вам нужно будет структурировать свой оператор, чтобы иметь дело с тремя возможными возвратами. значения: NULL (объект вообще не существует), 0 (существует, но не является триггером) или 1 (это триггер) .

34
ответ дан 26 November 2019 в 18:38
поделиться

Существует также предпочтительное "sys.triggers" представление каталога:

select * from sys.triggers where name = 'MyTrigger'

или вызов sp_Helptrigger сохранил proc:

exec sp_helptrigger 'MyTableName'

, Но кроме этого, я предполагаю, что это - об этом:-)

Обновление Marc

(для Jakub Januszkiewicz):

, Если необходимо включать информацию о схеме, Вы могли бы также сделать что-то вроде этого:

SELECT
    (list of columns)
FROM sys.triggers tr
INNER JOIN sys.tables t ON tr.parent_id = t.object_id
WHERE t.schema_id = SCHEMA_ID('dbo')   -- or whatever you need
60
ответ дан marc_s 26 November 2019 в 18:38
поделиться

Протестировано и не работает на SQL Server 2000:

select * from sys.triggers where name = 'MyTrigger'

Протестировано и работает нормально на SQL Server 2000 и SQL Server 2005:

select * from dbo.sysobjects
where name = 'MyTrigger' and OBJECTPROPERTY(id, 'IsTrigger')
2
ответ дан marc_s 26 November 2019 в 18:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: