spAutoProc_ZField

博客展示了一个SQL存储过程spAutoProc_ZField,该过程接收源表名、目标表名和字段映射表名作为参数,通过一系列SQL语句实现向源表添加字段,并更新字段映射表中对应字段的标志位,最后关闭并释放游标。

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

CREATE PROCEDURE spAutoProc_ZField @SourceTableName varchar(50), @TargetTableName varchar(50), @FieldMapTable varchar(50)
AS
 DECLARE @altQuery  nvarchar(1000),
   @sql   nvarchar(1000),
   @updQuery  nvarchar(1000),
   @colName  nvarchar(100),
   @idx1   int,
   @idx2   int
  
 SELECT @sql =
  ' DECLARE cs_AltQuery CURSOR FOR ' +
  ' SELECT ' +
  '''ALTER TABLE ''+''' + @SourceTableName + '''+'' ADD z''+' + 'COLUMN_NAME' + '+'' ''' +
  ' +DATA_TYPE+ ' + 'CASE ' +
       ' WHEN character_maximum_length IS NULL AND numeric_scale IS NULL  THEN ''(''+ cast(NUMERIC_PRECISION AS varchar(10)) + '')''' +
       ' WHEN character_maximum_length IS NULL AND NOT numeric_scale = 0   THEN ''(''+ cast(NUMERIC_PRECISION AS varchar(10))+' + ''', ''' + '+cast(NUMERIC_SCALE AS varchar(10)) + '')''' +
       ' WHEN character_maximum_length IS NULL AND numeric_scale = 0   THEN '' ''' +
       ' ELSE ''(''+ cast(character_maximum_length AS varchar(10)) + '')'' END +' +
       ' '' NULL''' +
  ' FROM  information_schema.columns ' +
  ' WHERE TABLE_NAME = ''' + @TargetTableName + ''' AND ' +
  '   COLUMN_NAME IN (SELECT ColumnName FROM ' + @FieldMapTable +
  '       WHERE SourceTableName = ''' + @SourceTableName + ''' AND ' +
  '       Flag = 0 )'

 EXEC sp_executesql @sql

 OPEN cs_AltQuery
 FETCH NEXT FROM cs_AltQuery INTO @altQuery

 WHILE @@FETCH_STATUS = 0
 BEGIN
  PRINT 'Processing query ''' + @altQuery + ''' ...'
  SELECT @idx1 = CHARINDEX(' ', @altQuery, 16+LEN(@SourceTableName))
  SELECT @idx2 = CHARINDEX(' ', @altQuery, 1+@idx1)
  SELECT @colName = SUBSTRING(@altQuery, 2+@idx1, @idx2-@idx1-1)

  EXEC (@altQuery)
  SELECT @updQuery = ' UPDATE ' + @FieldMapTable +
      ' SET Flag = 1 ' +
      ' WHERE ColumnName = ''' + @colName + ''''
  EXEC (@updQuery)
  PRINT 'The query ''' + @altQuery + ''' has been successfully processed.'
  FETCH NEXT FROM cs_AltQuery INTO @altQuery
 END
 CLOSE cs_AltQuery
 DEALLOCATE cs_AltQuery

转载于:https://www.cnblogs.com/zhangchenliang/archive/2010/02/01/1660844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值