有一个表,表里有个字段,字段名就是表名,是被触发生成的!
现求一个存储过程,输入表名,将该表插入另外一个数据库里的
同一个表名的表里(表结构一个,源表中不存在被触发的字段)
由于目标表中有个一个字段是触发的,所以要用到游标
请大虾门帮忙

解决方案 »

  1.   

    create procedure protest
    @tbname varchar(50)
    as 
    declare @sql varchar(500)
    set @sql='insert into db2.dbo.'+@tbname+' select * from db1.dbo.'+@tbname 
    exec(@sql)
    --db2.dbo.tb要是需要触发的话可以再用一sql语句来触发。
      

  2.   

    alter proc P_TableTrans54 @TableName varchar(8000)
    as
    declare @columns varchar(8000)
    declare @AlterTable varchar(8000)
    declare @sql varchar(8000)
    declare @PKdelete varchar(8000)
    select @columns=right(dbo.F_cross(a.name),len(dbo.F_cross(a.name))-1) from sysobjects a inner join syscolumns b on a.id=b.id where a.name=@TableName group by a.name
    if @columns<>''
    begin
    set @PKdelete=@TableName+'ID,'
    set @columns=REPLACE(@columns,@PKdelete,'')
    set @columns=REPLACE(@columns,',flag','')
    set @AlterTable='[192.168.1.54].CatEntity203.dbo.'+@TableName

    set @sql='declare Cur_TableTrans54 Cursor For select refindKey from '+@TableName+' where flag=0
    Open Cur_TableTrans54 
    Fetch Next From Cur_TableTrans54 into @refindKey
    While (@@FETCH_STATUS=0)
    Begin
    insert into'+ @AlterTable+'('+@TableName+'ID,'+@columns+') 
    select 0,'+@columns+' from '+@TableName+' where refindKey=@refindKey
    if (@@error <>0)
    Begin
    Fetch Next From Cur_TableTrans54 into @refindKey
    continue
    end
    update '+@TableName+' set flag=1 where refindKey=@refindKey     
    Fetch Next From Cur_TableTrans54 into @refindKey
    End
    Close Cur_TableTrans54
    Deallocate Cur_TableTrans54'
    exec @sql
    end