把指定表中的列添加到目标表中不包含的列

本文介绍了一个SQL过程,用于从旧数据库中的表复制结构到新数据库中的表,包括创建缺失的表及添加缺失的列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROC pro_addColumn
(
@oldDB VARCHAR(20),
@newDB VARCHAR(20),
@oldtable VARCHAR(50),
@newtable VARCHAR(50)
)
AS
EXEC ('USE  '+ @newDB+'')
IF object_id(''+@newtable+'') is null 
 BEGIN
  PRINT @newtable+'不存在,创建表'
  EXEC('SELECT * INTO '+@newtable+' FROM '+@oldtable+' WHERE 1=2')
  PRINT '创建成功'
 END
ELSE 
BEGIN 
DECLARE @colname VARCHAR(30)
DECLARE @datatype VARCHAR(20)
DECLARE @length VARCHAR(20)
EXEC ('USE  '+ @oldDB+'')
DECLARE test_cursor CURSOR SCROLL FOR
select name ,type_name(xtype) AS datetype,length
from syscolumns where id=object_id(''+@oldtable+'')
OPEN test_cursor

FETCH NEXT FROM test_cursor INTO @colname,@datatype,@length
PRINT 'old:'+@colname+' '+@datatype+'  '+@length
WHILE @@FETCH_STATUS=0
BEGIN
EXEC ('USE  '+ @newDB+'')
IF NOT EXISTS(select name  
from syscolumns where id=object_id(''+@newtable+'')AND name=@colname)
BEGIN
PRINT '新表不存在列:'+@colname
IF @datatype='int' OR @datatype='bit' OR @datatype='text' OR @datatype='xml'
 BEGIN
 PRINT '为表'+@newtable+'添加列:'+@colname+'  '+@datatype+'  '+@length
   EXEC(' ALTER TABLE '+@newtable+' ADD '+@colname+'  '+@datatype+'')
 END
ELSE
 IF @length='-1'
  BEGIN
   SET @length='MAX'
  END
  PRINT '为表'+@newtable+'添加列:'+@colname+'  '+@datatype+'  '+@length
  EXEC(' ALTER TABLE  '+@newtable+' ADD '+@colname+'  '+@datatype+' ('+@length+')')
  END
ELSE
BEGIN
PRINT '新表中存在列:'+@colname
END

FETCH NEXT FROM test_cursor INTO @colname,@datatype,@length
END

CLOSE test_cursor
DEALLOCATE test_cursor
END

 

转载于:https://www.cnblogs.com/smailxiaobai/archive/2013/03/23/2976687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值