create procedure Output_ConfigInfo3
@BSC varchar(2)
as
begin
declare @table varchar(30)
set @table = 'dbo.tDistanceB'+@BSC
select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,(c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,@table d,dbo.oChange c
where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI
and b.CI = c.CI and n.NCI = c.gCI
end消息 1087,级别 15,状态 2,过程 Output_ConfigInfo3,第 10 行
必须声明表变量 "@table"。
为什么报这个错,怎么解决?

解决方案 »

  1.   

    表名用变量时必须用动态sql,如:
    declare   @tablename   varchar(100) 
    set   @tablename= '你要的表名 ' 
    exec( 'select   *   from   '+@tablename)
      

  2.   


    create procedure Output_ConfigInfo3
    @BSC varchar(2)
    as
    begin
    declare @table varchar(30)
    declare @sql varchar(4000)
    set @table = 'dbo.tDistanceB'+@BSC
    set @sql = 'select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,
    (c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
    from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,'+@table+' d,dbo.oChange c
    where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI
        and b.CI = c.CI and n.NCI = c.gCI'
    exec(@sql)
    end
      

  3.   

    create procedure Output_ConfigInfo3
    @BSC varchar(2)
    as
    begin
    declare @table varchar(30),@sql varchar(8000)
    set @table = 'dbo.tDistanceB'+@BSC
    set @sql='select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,
     (c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
    from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,'+@table+' d,dbo.oChange c
    where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI
        and b.CI = c.CI and n.NCI = c.gCI'
    exec(@sql)end
      

  4.   

    create procedure Output_ConfigInfo3
    @BSC varchar(2)
    as
    begin
    declare @table varchar(30)
    set @table = 'dbo.tDistanceB'+@BSC
    exec('select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,(c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
    from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,'+@table+' d,dbo.oChange c
    where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI
        and b.CI = c.CI and n.NCI = c.gCI')
    end
      

  5.   

    create procedure Output_ConfigInfo3
    @BSC varchar(2)
    as
    begin
    declare @table varchar(30)
    declare @sql varchar(255)
    set @table = 'dbo.tDistanceB'+@BSC
    set @sql='select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,(c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
    from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,'+@table+' d,dbo.oChange c
    where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI and b.CI = c.CI and n.NCI = c.gCI'
    exec(@sql)
    end
      

  6.   


    create procedure Output_ConfigInfo3
    @BSC varchar(2)
    as
    begin
    declare @table varchar(30)
    declare @sql varchar(2000)
    set @table = 'dbo.tDistanceB'+@BSC
    set @sql='select n.BSC,n.BTSNO,n.CELL,b.CI,n.NCI,d.DISTANCE,(c.success+c.invalidPilotFail+c.blockFail+c.otherFail) as changeno,n.PILOT_PN,n.NCELLSYSTEM,n.NCELL
    from dbo.oNeihtborhoodInfo n,dbo.tBaseStation b,'+
    @table+' d,dbo.oChange c
    where n.BSC = b.BSC and n.BTSNO = b.BTSNO and n.CELL = b.CELL and b.CI = d.CI and n.NCI = d.NCI
        and b.CI = c.CI and n.NCI = c.gCI'
    exec(@sql)
    end
      

  7.   

    用动态sql就行了!
    DECLARE @table VARCHAR(10)
    SET @table = 'course'
    EXEC('select * from'+' '+@table)