在SQL Server中,
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[test] ') and OBJECTPROPERTY(id, N 'IsView ') = 1)
drop view [dbo].[vtest]
可以通过这种方式来查找数据库中是否有某个view,如果有就drop (同样适用于表)
在DB2中,也有系统表,记录了所有视图、用户表的信息。但是怎样用if exists来实现上面的要求呢 ?
谢谢大家!
------解决方案--------------------------------------------------------
CREATE PROCEDURE ADMINISTRATOR.ClearTest ( )
P1: BEGIN
IF EXISTS (select * from sysibm.systables where TID <> 0 and name = 'EDITBUS')THEN
drop table EDITBUS;
END IF;
END P1
--成功的例子,我试过的,连续执行两次返回的结果为:
------------------------------ 输入的命令 ------------------------------
CALL CLEARTEST()!
------------------------------------------------------------------------------
CALL CLEARTEST()
返回状态 = 0
------------------------------ 输入的命令 ------------------------------
CALL CLEARTEST()!
------解决方案--------------------------------------------------------
我测试没有问题啊
CREATE PROCEDURE ExistsTest(IN TableName varchar(50),OUT iReturn int)
LANGUAGE SQL
P1: BEGIN
DECLARE stmt VARCHAR(200);
IF EXISTS (select * from sysibm.systables where TID <> 0 and name = TableName ) THEN
set stmt ='drop table '|| TableName;
PREPARE s1 FROM stmt;
EXECUTE s1;
set iReturn =0;
else
set iReturn =-1;
END IF;
END P1@
db2 => call ExistsTest('EMPLOYEE3',?)@
输出参数的值
--------------------------
参数名: IRETURN
参数值: -1
返回状态 = 0
db2 => create table employee3 like employee@
DB20000I SQL 命令成功完成。
db2 => call ExistsTest('EMPLOYEE3',?)@
输出参数的值
--------------------------
参数名: IRETURN
参数值: 0
返回状态 = 0