改成这样试试,加上单引号,而且必须写两次:--因为在' + cast(@TimeId as varchar(255)) + '这里无法加 ' 报错
declare @sql varchar(255)
declare @id varchar(255),@TimeId varchar(255);   set @sql = 'SELECT TOP ' + cast(@id as varchar) + ' * FROM bbb where schoolid = ''' + cast(@TimeId as varchar(255)) + ''' ORDER BY TimeId'
   exec(@sql)

解决方案 »

  1.   

    也就是把:
       set @sql = 'SELECT TOP ' + cast(@id as varchar) + ' * FROM bbb where schoolid = ' + cast(@TimeId as varchar(255)) + ' ORDER BY TimeId'改成:
       set @sql = 'SELECT TOP ' + cast(@id as varchar) + ' * FROM bbb where schoolid = ‘’' + cast(@TimeId as varchar(255)) + '‘’ ORDER BY TimeId'
      

  2.   

    declare @sql varchar(255)
    declare @id varchar(255),@TimeId varchar(255);
    SET @timeid ='301221'
    SET @id=10
     
    set @sql = 'SELECT TOP (' + cast(@id as varchar) + ') * FROM bbb where schoolid = ' + cast(@TimeId as varchar(255)) + ' ORDER BY TimeId'
    PRINT(@sql)
    set @sql = 'SELECT TOP (' + cast(@id as varchar) + ') * FROM bbb where schoolid = ''' + cast(@TimeId as varchar(255)) + ''' ORDER BY TimeId'
    PRINT(@sql)/*
    SELECT TOP (10) * FROM bbb where schoolid = 301221 ORDER BY TimeId
    SELECT TOP (10) * FROM bbb where schoolid = '301221' ORDER BY TimeId*/