Есть ли способ проверить, является ли объект таблицей или представлением в SQL Server? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть вид, что я перехожу на таблицу в SQL Server.

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

Мой код работает при первом запуске (когда объект является представлением), но когда мне нужно запустить его несколько раз, я получаю эту ошибку:

Невозможно использовать DROP VIEW с 'engineer.Well', потому что 'engineer.Well' - это таблица. Используйте DROP TABLE.

Я искал в Интернете, но не могу найти способ проверить, является ли объект таблицей или представлением, и впоследствии отбросить объект.

Любой совет будет принят с благодарностью.

Прямо сейчас это выглядит так,

IF OBJECT_ID('engineer.well') IS NOT NULL
BEGIN
    DROP TABLE [engineer].[Well]
    PRINT '<<< DROPPED TABLE Vendor >>>'
END

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

Ответы [ 3 ]

5 голосов
/ 30 мая 2019

Вы можете запросить системные представления.

DECLARE @Type varchar(2)
SELECT @Type = type 
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE o.name = 'well'
AND s.name = 'engineer'

IF  @Type = 'U'
BEGIN
    DROP TABLE [engineer].[Well]
    PRINT '<<< DROPPED TABLE Vendor >>>'
END

IF  @Type = 'V'
BEGIN
    DROP VIEW [engineer].[Well]
    PRINT '<<< DROPPED VIEW Vendor >>>'
END
1 голос
/ 30 мая 2019

OBJECTPROPERTY (OBJECT_ID ('name'), 'IsView') https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql?view=sql-server-2017 или SELECT id, введите FROM sysobjects, где id = OBJECT_ID ('objectName')

0 голосов
/ 30 мая 2019

Вы можете запросить таблицу sys.objects:

select type_desc, * from sys.objects where object_id = object_id('[dbo].[DimDates]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...