use tempdb
go
declare @queryYear smallint
declare @queryMonth smallint
declare @queryDay smallint
set @queryYear = 2005
set @queryMonth = 4
set @queryDay = 10
declare @strsql varchar(4000)
set @strsql = 'select @queryYear,@queryMonth,@queryDay'
exec(@strsql)
go
为什么运行的时候报错:
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@queryYear'。

解决方案 »

  1.   

    use tempdb
    go
    declare @queryYear smallint
    declare @queryMonth smallint
    declare @queryDay smallint
    set @queryYear = 2005
    set @queryMonth = 4
    set @queryDay = 10
    exec('select '+@queryYear+','+@queryMonth+','+@queryDay)
    go
      

  2.   

    set @strsql = 'select @queryYear,@queryMonth,@queryDay'改成
    set @strsql = 'select '+@queryYear+','+'@queryMonth+','+@queryDay
      

  3.   

    --or:use tempdb
    go
    declare @queryYear smallint
    declare @queryMonth smallint
    declare @queryDay smallint
    set @queryYear = 2005
    set @queryMonth = 4
    set @queryDay = 10
    declare @strsql varchar(4000)
    set @strsql = 'select '+cast(@queryYear as varchar)+','+cast(@queryMonth as varchar)+','+cast(@queryDay as varchar)+''
    exec(@strsql)
    go