object_id () против sys.objects - PullRequest
       17

object_id () против sys.objects

3 голосов
/ 28 апреля 2009

Я использую сценарии базы данных, где проверяю наличие хранимой процедуры, затем удаляю ее и создаю.

Что из нижеперечисленного было бы более эффективным для проверки и удаления SPs
Вариант 1

IF EXISTS(SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[myStoredProc]',N'P'))
  DROP PROCEDURE dbo.myStoredProc;

Вариант 2

IF OBJECT_ID (N'dbo. myStoredProc',N'P') IS NOT NULL
  DROP PROCEDURE dbo.myStoredProc;

Я решил использовать второй по очевидным причинам, есть ли причина, по которой я должен выбрать первый вариант

Ответы [ 2 ]

3 голосов
/ 16 мая 2016

Прилив изменился. Согласно действующей политике MSDN, вместо представлений INFORMATION_SCHEMA следует использовать sys.objects, поскольку представления sys содержат больше информации, чем последние.

1 голос
/ 28 апреля 2009

Нет, нет веских причин использовать sys.objects напрямую. На самом деле, использование этих системных представлений не рекомендуется, поэтому, если вы можете избежать этого, сделайте это!

Вместо этого, по возможности, должны использоваться представления схемы INFORMATION_SCHEMA - это стандартные механизмы SQL-92 для представления метаданных о вашем сервере (а не специфический для Microsoft способ использования представлений sys. *).

Марк

...