如果这样,可以不用拥游标CREATE PROCEDURE [xx] ASinsert table_2(col_1,col_2)
select col_1,col_2 from table_1go

解决方案 »

  1.   

    set @tab_sql=N'insert into table_2 (col_1,col_2) values (@col_11,@col_21)' 
    execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2
      

  2.   

    CCEO(CSDN的CEO??) ,
    你那样不行啊,它回要求我必须声明变量@col_11、@col_21
      

  3.   

    jyk1970() ,那两个''是什么呢?什么时候用一个,when use 2,when use 3?
      

  4.   

    用循環吧;DECLARE @numI numeric(6)
    DECLARE @numCount numeric(6)
    DECLARE @numCurId numeric(6)--考慮id可能斷號,借@numCurId處理
    SET @numI=0
    SELECT @numCount=COUNT(*),@numCurId=ISNULL(MIN(id),0)-1  FROM tableWHILE (@numI<@numCount)
    BEGIN
    SELECT TOP 1 @numCurId=A.id  , ...
    WHERE A.id>@numCurId
                       FROM table
    ORDER BY A.id

    你的處理過程
                        ...
    SET @numI=@numI+1
    END
      

  5.   

    kalvin(巨轮) :
    1、你试了吗?我最怕没试就说不行,注意 #1处的相应修改
    2、不用游标不是更简单?
      

  6.   

    CCEO(CSDN的CEO??) ,
    你上面描述的我做过测试,确实不行,i do it as:set @tab_sql=N'exec(''insert into table_2 (col_1,col_2) values (@col_11,@col_21)'')' 
    execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2你会问我为什么非这么用,因为我实际应用中那个table_2表名也是动态传递变量过来的,因此我只好如此
      

  7.   

    Table_2动态,假设放在@Table_2:set @tab_sql=N'insert into ' + @Table_2 + ' (col_1,col_2) values (@col_11,@col_21)' 
    execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2你可以按你的情况改我写的语句,但是如果不行,请检查你自己改的部分,而不要太早下结论,因为本CEO回答技术问题所用的SQL语句都是根据测试结果或者以前测试过的经验的。
      

  8.   

    如果一定要这么包含:set @tab_sql=N'DECLARE @SQL VARCHAR(200) SET @SQL=''insert into '+@table_2+' (col_1,col_2) values(''''''+@col_11+'''''',''+cast(@col_21 AS VARCHAR(20))+'')'' EXEC(@SQL)'
    execute sp_executesql @tab_sql,N'@col_11 varchar(20),@col_21 numeric(18,2)',@col_1,@col_2 --#2
      

  9.   

    说点题外的吧其实,动态SQL不是好东西,可读性极差,写的程序很难看懂
    更要命的是,效率也比一般的差
    建议,动态SQL用于学习可以,不要用到实际应用中,除非确实有把握(有把握能读懂,有把握效率不低)
      

  10.   

    to kalvin (巨轮) :--请看一个常用的备份sql语句
    declare @l_sql varchar(4000) 
    select @l_sql='backup database test to disk=''' + 'c:\' + convert(char(8), getdate(), 112) + '.bak''' 
    exec (@l_sql)--执行完后,@l_sql中的内容如下:
    backup database test to disk='c:\20040406.bak'