刚接触sql编程,自己随便写了一段。
是要把数据从另外一台机子的前置机接口数据库,导入到中心端的buff库中
前置机的接口库相当于中心端buff库的一个子集,大概也就导120个表的样子
代码如下,在机子上跑了下,太慢了,半个小时过去了,还没跑完,请大家帮忙看看,有什么地方需要优化的没有?SELECT name AS tablename INTO temp_name FROM sysobjects WHERE xtype='u'
DELETE FROM temp_name WHERE  tablename = 'temp_name'
declare @t_name varchar(30)
DECLARE @sql VARCHAR(4000)
declare dic_cur cursor for select tablename from temp_name 
open dic_cur
fetch next from dic_cur into @t_name
if (@@FETCH_STATUS <> 0)
begin
      print N'fetch error!'
END
while @@FETCH_STATUS=0
BEGIN
    EXECUTE ('TRUNCATE TABLE '+ @t_name)
    SET @sql='insert into '+@t_name+' SELECT * FROM itsv.qzj_interface.dbo.'+@t_name
    EXECUTE @sql
END
DROP TABLE temp_name//itsv 是定义的链接服务器,连到局域网内另外一台机器。

解决方案 »

  1.   

    while @@fetch_status=0
    begin
      EXECUTE ('TRUNCATE TABLE '+ @t_name)
      SET @sql='insert into '+@t_name+' SELECT * FROM itsv.qzj_interface.dbo.'+@t_name
      EXECUTE @sql
      fetch next from dic_cur into @t_name --少了一句
    end
      

  2.   

    这一段:
    if (@@FETCH_STATUS <> 0)
    begin
      print N'fetch error!'
    END
    应该设置为if else 结构这一句:
    EXECUTE @sql
    应为
    execute (@sql)
      

  3.   

    对了,后面还要再
    fetch next from dic_cur into @t_name 
    不然就是个死循环.
      

  4.   

    嗯,结构一样的,buff库的字段多一些,长度多一些。
      

  5.   

    加了 fetch next from dic_cur into @t_name 进去后,还是要报错 在 sys.servers 中找不到服务器 'insert into TB_JBGL_TNBSQBG SELECT * FROM itsv'。请验证指定的服务器名称是否正确。如果需要,请执行存储过程 sp_addlinkedserver 以将服务器添加到 sys.servers。
    消息 7202,级别 11,状态 2,第 16 行但是执行 select * from itsv.qzj_interface.dbo.表名 又没问题。。
      

  6.   

    关注,我也动态sql的时候用链接服务器表名当变量杯具过
    至今未解决,很灵异