exec ('TRUNCATE TABLE ZFGZ_RP1')
--直接这样就可以了!
insert into @tmpTB1 select bm_id,bjsj,substring(zfzj,2,100) as zfzj from ZFGZ_GZ_B1 where 1=1

解决方案 »

  1.   

    CREATE PROCEDURE sp_RP1  
    @bmid int,@bjsj1 varchar(10),@bjsj2 varchar(10)
    AS
    begin
    declare @i int,
    @k int,
    @bm_id int,
    @ajs int,
    @ajs2 int,
    @sql varchar(8000)TRUNCATE TABLE ZFGZ_RP1
    set @sql='
    DECLARE @tmpTB1 TABLE
    (
      bm_id int,
      bjsj varchar(10),
      zfzj varchar(100)
    )DECLARE @bmTB1 TABLE
    (
      bm_id int,
      ajs int,
      FlagID  TINYINT
    )
    insert into @tmpTB1 select bm_id,bjsj,substring(zfzj,2,100) as zfzj from ZFGZ_GZ_B1 where 1=1'   --这一段如何写?
    exec (@sql)END
    表变量带不进去,换表可以,第二种就是把表变量写到exec里,但好象没什么意义....
      

  2.   

    很明显,你的这个书写有问题,变量不能直接放在字符串内部,必须独立出来
    可以这么写:
    set @sql='insert into '+@tmpTB1+' select bm_id,bjsj,substring(zfzj,2,100) as zfzj from ZFGZ_GZ_B1 where 1=1' 
      

  3.   

    到目前为止还没有解决问题。
    为方便大家测试我把它改成以下代码,如果可以调用成功,那么就成了。CREATE PROCEDURE sp_pp1 AS 
    DECLARE @sql varchar(200)
    DECLARE @tmpTB1 TABLE 

      bm_id int, 
      bjsj varchar(10), 
      zfzj varchar(100) 
    ) BEGIN set @sql='delete from @tmpTB1 '
    exec (@sql) ENDGO
      

  4.   

    表变量说到底还是个变量,作用域只在当前会话,而且exec 和sp_executeslq里都不能使用,微软规定的
      

  5.   

    @tmpTB1 是 exec(…) 外声明的变量,所以在运行时提示必须声明变量
    所以你还是改用别的办法来实现将
    set @sql='insert into @tmpTB1 select bm_id,bjsj,substring(zfzj,2,100) as zfzj from ZFGZ_GZ_B1 where 1=1'    
    exec (@sql) 改为
    insert into @tmpTB1 select bm_id,bjsj,substring(zfzj,2,100) as zfzj from ZFGZ_GZ_B1 where 1=1