要执行一个语句,里面有table数据类型,但这样好像不能运行,怎么改才能执行呢?declare @sql varchar(4000)
declare @varTableName varchar(100)
declare @tmpTable table
(ID int,
 Name varchar(100),
 TypeID int,
 CountNum int,
 CreatorName varchar(50),
 CreateTime datetime,
 IsLock bit,
 IsElite bit,
 IsTop bit,
 IsVote bit,
 IsAttach bit,
 ReplyCount int,
 Emotion varchar(100),
 IsFocus bit  
 )set @varTableName='BBS_Subject_293'set @sql='insert into @tmpTable select ID,Name,TypeID,countNum,CreatorName,CreateTime,IsLock,IsElite,IsTop,IsVote,IsAttach,ReplyCount,Emotion,IsFocus
 from '+ @varTableName + ' where IsFocus=1'exec(@sql)select * from @tmpTable
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@tmpTable'。

解决方案 »

  1.   

    exec外部定義的表變量不能在exec內部使用,改用臨時表或者實體表吧。
      

  2.   

    declare @sql varchar(4000)
    declare @varTableName varchar(100)
    Create table #tmpTable 
    (ID int,
     Name varchar(100),
     TypeID int,
     CountNum int,
     CreatorName varchar(50),
     CreateTime datetime,
     IsLock bit,
     IsElite bit,
     IsTop bit,
     IsVote bit,
     IsAttach bit,
     ReplyCount int,
     Emotion varchar(100),
     IsFocus bit  
     )set @varTableName='BBS_Subject_293'set @sql='insert into #tmpTable select ID,Name,TypeID,countNum,CreatorName,CreateTime,IsLock,IsElite,IsTop,IsVote,IsAttach,ReplyCount,Emotion,IsFocus
     from '+ @varTableName + ' where IsFocus=1'exec(@sql)select * from #tmpTable
      

  3.   

    功力深厚啊!
    LS的朋友,能不能推荐个学习SQL高级语法的书或者教程?SQL自带的HELP好像都没说这些啊?
      

  4.   

    yrwx001() ( ) 信誉:100  2007-08-24 16:48:10  得分: 0  
     
     
       是的
    用sp_executesql
      
     
    ---------
    你是在回答這個問題嗎?
      

  5.   

    另外,paoluo兄,我经常听别人说少用游标,上面这个语句中的 
    set @varTableName='BBS_Subject_293'
    这个变量我要通过select name from bbs_board 来得到,所以,每次得到一个NAME,然后填充临时表,是用游标还是不推荐游标?不用游标该怎么做呢?分不够,我晚上用另外一个帐号补给你哈。
      

  6.   

    http://community.csdn.net/Expert/TopicView3.asp?id=5727381
    请到这里接分,谢谢
      

  7.   

    的確,游標的效率很低,能不用就盡量不用。但是有時候,不得不用,也沒辦法。就通過你那段描述,可能的確需要使用游標。不過,如果你得到的@varTableName不是太多的話,應該可以使用動態語句實現,不需要使用游標。
      

  8.   

    動態語句實現?值都在boardName表里面啊,如何动态语句哦?
      

  9.   

    --假設字段名為Name,且Name的數目不多於50個trydeclare @sql varchar(8000)Create table #tmpTable 
    (ID int,
     Name varchar(100),
     TypeID int,
     CountNum int,
     CreatorName varchar(50),
     CreateTime datetime,
     IsLock bit,
     IsElite bit,
     IsTop bit,
     IsVote bit,
     IsAttach bit,
     ReplyCount int,
     Emotion varchar(100),
     IsFocus bit 
     )select @sql = ''
    select @sql= @sql + ' union all select ID,Name,TypeID,countNum,CreatorName,CreateTime,IsLock,IsElite,IsTop,IsVote,IsAttach,ReplyCount,Emotion,IsFocus
     from '+ Name + ' where IsFocus=1' From boardName
    select @sql = 'insert into #tmpTable ' + stuff(@sql, 1, 10, '')
    exec(@sql)select * from #tmpTabledrop table #tmpTable