我认为我要更改为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
我正在研究一种方法,以检查对象是否为表格然后将其删除,或者检查它是否为视图然后将其删除。
答案 0 :(得分:5)
您可以查询系统视图。
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 :(得分:1)
OBJECTPROPERTY(OBJECT_ID('name'),'IsView') https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql?view=sql-server-2017 要么 选择ID,然后输入FROM sysobjects,其中id = OBJECT_ID('objectName')
答案 2 :(得分:0)
您可以查询sys.objects表:
select type_desc, * from sys.objects where object_id = object_id('[dbo].[DimDates]')