首页 > 解决方案 > 有没有办法检查对象是 SQL Server 中的表还是视图?

问题描述

我有一个视图,我正在更改为 SQL Server 中的表。

我正在删除视图,然后我的代码的下一部分将建立表格。

我的代码在我第一次运行时工作(当对象是视图时),但是当我需要多次运行它时,我得到了这个错误:

不能将 DROP VIEW 与“engineer.Well”一起使用,因为“engineer.Well”是一张表。使用删除表。

我一直在网上寻找,但找不到检查对象是表还是视图的方法,然后删除了该对象。

任何建议将不胜感激。

现在看起来是这样的,

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

我正在尝试一种方法来检查对象是否是表格然后将其删除,或者检查它是否是视图然后删除它。

标签: sql-server

解决方案


您可以查询系统视图。

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

推荐阅读