在存储过程中删除表的列

      在动态创建数据库的表的字段时,如果该字段的“是否为空”的属性为非空,且该表与其他表有联系,那么动态删除该列可能失败。报错原因因为有一个或多个对象访问此列。解决方法是先删除在该列上的约束,然后在删除该列!

     存储过程如下:

CREATE PROCEDURE PR_DELTABLEROW
@TABLENAME VARCHAR(100),@DATAFIELDNAME VARCHAR(100)
AS

BEGIN TRAN

DECLARE @SQLDEL VARCHAR(500),@DF_NAME VARCHAR(500)

SET @SQLDEL=''
/*判断该列是否存在*/
IF   exists(select   1   from   syscolumns   where   id=object_id(@TABLENAME) and  name= @DATAFIELDNAME)
BEGIN
    /*查找该列的约束*/
    SELECT @DF_NAME =NAME FROM SYSOBJECTS WHERE XTYPE='D' AND PARENT_OBJ=OBJECT_ID(@TABLENAME) AND EXISTS(SELECT * FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@TABLENAME) AND INFO=COLID AND NAME = @DATAFIELDNAME)
    /*删除该列的约束*/
    SET @SQLDEL ='ALTER TABLE ' + @TABLENAME + ' DROP CONSTRAINT '+ @DF_NAME
    EXEC (@SQLDEL)
 
    /*现在就可以该列了*/
    SET @SQLDEL = 'ALTER TABLE ' + @TABLENAME + ' DROP COLUMN ' + @DATAFIELDNAME
    EXEC (@SQLDEL)
END

if( @@ERROR = 0 )


COMMIT TRAN

else

ROLLBACK TRAN

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Oracle存储过程,你可以使用临时表来存储临时数据。临时表是在会话级别创建的,仅在当前会话可见,并在会话结束后自动删除。以下是使用临时表的一般步骤: 1. 创建临时表:使用CREATE GLOBAL TEMPORARY TABLE语句创建临时表。临时表可以是全局临时表(GLOBAL TEMPORARY TABLE)或本地临时表(LOCAL TEMPORARY TABLE)。全局临时表在所有会话之间共享结构定义,但数据仅在当前会话可见。本地临时表在会话级别创建和使用,并且只在当前会话可见。 2. 定义临时表结构:在CREATE TABLE语句定义临时表的和其他约束。 3. 在存储过程使用临时表:在存储过程,你可以像使用任何其他表一样使用临时表。你可以插入、更新、删除、查询临时表的数据,并在存储过程执行期间将其作为间结果使用。 4. 清空或删除临时表:当你需要清空或删除临时表的数据时,可以使用TRUNCATE TABLE或DELETE语句。TRUNCATE TABLE语句会快速删除表的所有数据,而保留表结构。DELETE语句可以根据条件删除表的数据。 5. 存储过程结束后临时表自动删除:一旦存储过程执行完毕或会话结束,临时表会自动删除,无需手动清理。 使用临时表可以在存储过程方便地存储和处理临时数据,提高性能和简化逻辑。注意,临时表的数据仅在当前会话可见,不会对其他会话产生影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值