declare @tt  text
set @tt=[成绩]
select  * from  @tt消息 2739,级别 16,状态 1,第 3 行
对于局部变量,text、ntext 和 image 数据类型无效。
消息 1087,级别 16,状态 1,第 3 行
必须声明表变量 "@tt"。
这是为什么呢?

解决方案 »

  1.   

    declare @tt  text
    set @tt=[成绩]
    exec('select  * from '+ @tt)
      

  2.   

    declare @tt  text
    set @tt=[成绩]
    exec('select  * from '+ @tt)
      

  3.   

    declare @tt  nvarchar(100) --这里最好用varchar或者nvarchar
    set @tt=[成绩]
    exec('select  * from '+ @tt)
      

  4.   

    declare @tt  nvarchar(20)
    set @tt=[成绩]
    exec('select  * from '+ @tt)消息 207,级别 16,状态 1,第 2 行
    列名 '成绩' 无效。成绩为一个表名,但库中是有这个表的。不知道为什么呢
      

  5.   

    加个引号:
    create table [成绩](sid int,cid int,scroe int)
    insert into [成绩] select 1,1,60
    insert into [成绩] select 2,1,75
    insert into [成绩] select 3,1,84
    go
    declare @tt nvarchar(1000)
    set @tt='[成绩]'
    exec('select * from '+ @tt)
    /*
    sid         cid         scroe
    ----------- ----------- -----------
    1           1           60
    2           1           75
    3           1           84(3 行受影响)*/
    go
    drop table [成绩]
      

  6.   


    declare @tt  varchar(100)
    set @tt=[成绩]
    exec('select  * from '+ @tt)
      

  7.   

    declare @tt  text
    set @tt=[成绩]
    exec('select  * from '+ @tt)