关于动态执行语句与newid()的问题
我要做一条数据筛选语句,随机抽出N条数据,这个N是不定的变量值,必须使用动态执行语句 
 代码如下: 
 set   @sqlstr   =    'insert   into   Exam_Users_Sub(EUS_UserID,   EUS_EG_ID,   EUS_Q_ID)   select   top    '+cast(@qCount_MN   as   varchar)+ '       '+cast(@UserID   as   varchar)+ '   as   UserID, '+cast(@EG_id   as   varchar)+ '   as   EG_id,Q_id   from   Questions   where   Q_C_ID   =    '+cast(@C_id   as   varchar)+ '   and   Q_Type   = '+   cast(@pCount_temp   as   varchar)+ '   nd   Q_Degree   =   2   order   by    '+cast(newid()   as   varchar(50))+ ' ' 
 		exec   @sqlstr	   
 这样的话,newid()这个函数就不能起作用,而且语句不能正常执行,有没有人碰到过类似的问题?谢谢
------解决方案--------------------declare @sqlstr varchar(8000) 
 set @sqlstr =  'insert into Exam_Users_Sub(EUS_UserID, EUS_EG_ID, EUS_Q_ID) select top  '+cast(@qCount_MN as varchar)+ '  '+cast(@UserID as varchar)+ ' as UserID, '+cast(@EG_id as varchar)+ ' as EG_id,Q_id from Questions where Q_C_ID =  '+cast(@C_id as varchar)+ ' and Q_Type = '+ cast(@pCount_temp as varchar)+ ' nd Q_Degree = 2 order by newid() ' 
 exec(@sqlstr) 
------解决方案-------------------- ' nd Q_Degree = 2 order by  '+cast(newid() as varchar(50))+ ' ' 
 ---------> 掉了个 'a ' 
  ' and Q_Degree = 2 order by  '+cast(newid() as varchar(50))+ ' ' 
------解决方案--------------------  use pubs 
 go   
 declare @str varchar(1000) 
 declare @k int  
 set @k=3 
 set @str= ' 
 select top  '+ rtrim(@k) + ' * from jobs order by newid() ' 
 --print @str 
 exec(@str)     
 job_id job_desc                                           min_lvl max_lvl  
 ------ -------------------------------------------------- ------- -------  
 7      Marketing Manager                                  120     200 
 14     Designer                                           25      100 
 5      Publisher                                          150     250 
------解决方案--------------------放在内部没有问题,如:     
 declare @sql varchar(8000),@i int   
 set @i=100   
 set @sql =   'select top  ' + cast(@i as varchar(100)) +  ' *  from sysobjects order by newid() '   
 print @sql   
 exec (@sql)