sqlserver:如果存在a表就删除a表,sqlserver语句该怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver:如果存在a表就删除a表,sqlserver语句该怎么写相关的知识,希望对你有一定的参考价值。
在存储过程中写,sqlserver2005
我想在a数据库建立一张procBMoreFund表,当我下次运行这个存储过程的时候,会把这张表删除,重新建立,表名相同。在这个存储过程中有n张这种表。存储过程如下:
create proc [dbo].[procB]
@the_date datetime
as
begin
create table procBMoreFund
(account_id varchar(12),
cnt int)
insert into procBMoreFund
exec procBMoreFund @the_date
end
exec procB '2007-10-10'
@tablename varchar(50)
as
if exists(select name from sysobjects where type='u' and name=@tablename)
exec('drop table '+@tablename)
go
proc_delete_table tb
-----------------------------------------
为什么不用临时表??
不过这样也行咯.等下我改好代码传上来本回答被提问者采纳 参考技术B delete table a 参考技术C 存储过程?还是在程序里写?
批量删除Sql Server对象(表,存储过程,触发器)
先在系统表中找到要处理的表名或者是存储过程的名字,在用游标对其进行处理
PS:SqlServer 2000使用的是系统表是sysobjects,类型字段是:xtype; SqlServer 2005以上版本的系统表是Sys.Objects,类型字段是Type
本文中以Sql2005为例,Sql2000版本请自行按照上述说明进行替换
注意 sys.objects 中type的值不同 删除命令是不同的
如删除存储过程用drop PROCEDURE PROCEDURENAME 删除表用 drop table tablename 删除触发器用Drop Trigger TriggerName
sys.objects.type的值表示的意思如下表:
C:检查约束。
D:默认的约束
F:外键约束
L:日志
P:存储过程
PK:主键约束
RF:复制过滤存储过程
S:系统表格
TR:触发器
U:用于表格。
UQ:独特的约束。
批量处理的代码如下:
DECLARE cursorname cursor for select ‘drop PROCEDURE ‘+name from sys.objects where name like ‘xx%‘ and xtype = ‘p‘ --删除对应的存储过程
DECLARE cursorname cursor for select ‘drop Trigger‘+name from sys.objects where name like ‘xx%‘ and xtype = ‘tr‘ --删除对应的触发器
open cursorname
declare @curname sysname
fetch next from cursorname into @curname
while(@@fetch_status=0)
begin
exec(@curname)
fetch next from cursorname into @curname
end
close cursorname
deallocate cursorname
以上是关于sqlserver:如果存在a表就删除a表,sqlserver语句该怎么写的主要内容,如果未能解决你的问题,请参考以下文章