代码如下(实现源表和目标表的按表编号进行拷贝)
declare @sql nvarchar(100)
declare @TableNo int
declare @srvTableName varchar(100)
declare @DstTableName varchar(100)
set @srvTableName = 'tb_1'
set @DstTableName = 'tmp_sp_1'
set @sql = 'declare c_tmp cursor for' + CHAR(13)
set @sql = @sql + ' select distinct TableNo from ' + @SrvTableName
exec sp_executesql @sql
open c_tmp
Fetch next from c_tmp into @TableNo
while(@@FETCH_STATUS = 0)
begin
exec ('select * into ' + @DstTableName + 'from' + @SrvTableName + 'where TableNo = ' + @TableNo)
Fetch next from c_tmp into @TableNo
end
close c_tmp
deallocate c_tmp
调试后发现,循环一直进不去,不知道是什么原因,希望大神们搭救
------解决思路----------------------
测试下来,游标生效的,估计是你的exec ('select * into ' + @DstTableName + 'from' + @SrvTableName + 'where TableNo = ' + @TableNo) 这句话有问题导致的
------解决思路----------------------
select * into tmp_sp_1 from ...
只有在表tmp_sp_1不存在时才创建新表并插入数据,假如tmp_sp_1已存在就报错。
应该在循环外创建表,循环中用
INSERT INTO tmp_sp_1 select * from ...