网上找了好多方法都不靠谱,尤其是百度百科的那个IF EXISTS (SELECT* FROM sys.views WHERE object_id = '[dbo].[视图名]',使用的时候直接报错,浪费我的时间
下面的方法可行,最起码判读存储过程的那个可行,我已经测试了,其它的没有测试
1 --判断数据库是否存在 2 IF EXISTS(SELECT * FROM master.dbo.sysdatabases WHERE name=N'库名') 3 print 'exists' 4 ELSE 5 print 'not exists' 6 --------------- 7 -- 判断要创建的表名是否存在 8 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[表名]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) 9 -- 删除表 10 DROP TABLE [dbo].[表名] 11 GO 12 --------------- 13 --判断要创建临时表是否存在 14 IF Object_Id('Tempdb.dbo.#Test') IS NOT NULL 15 BEGIN 16 print '存在' 17 END 18 ELSE 19 BEGIN 20 print '不存在' 21 END 22 --------------- 23 -- 判断要创建的存储过程名是否存在 24 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[存储过程名]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) 25 -- 删除存储过程 26 DROP PROCEDURE [dbo].[存储过程名] 27 GO 28 --------------- 29 -- 判断要创建的视图名是否存在 30 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[视图名]') AND OBJECTPROPERTY(id, N'IsView') = 1) 31 -- 删除视图 32 DROP VIEW [dbo].[视图名] 33 GO 34 --------------- 35 -- 判断要创建的函数名是否存在 36 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[函数名]') AND xtype IN (N'FN', N'IF', N'TF')) 37 -- 删除函数 38 DROP FUNCTION [dbo].[函数名] 39 GO 40 IF col_length('表名', '列名') IS NULL 41 print '不存在' 42 SELECT 1 FROM sysobjects WHERE id IN (SELECT id FROM syscolumns WHERE name='列名') AND name='表名'