from (select distinct CONVERT(varchar(10),datepart(week,billdate)) as billdate from kaicheng_TBusRetailDT 
where style in (select style from [@temp])
--关键是这句话错误,忘记了使用引号作字符串拼接了,那么,SQL解析器就把@temp当成一个对象,所以报错

解决方案 »

  1.   

    select @sql = @sql + ' , sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then qty else 0 end)  [' + dbo.GetWeekRange(billdate) + '周零售数量],'
    +' sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount else 0 end)  [' + dbo.GetWeekRange(billdate) + '周成交金额]'
    +', sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount-qty*fob else 0 end)  [' + dbo.GetWeekRange(billdate) + '周毛利]'
    from (select distinct CONVERT(varchar(10),datepart(week,billdate)) as billdate from kaicheng_TBusRetailDT 
    where style in (select style from [@temp])
    这个一整算的
    如果加上引号,上面就无法执行
      

  2.   

    我的需求是一临时表@temp要把kaicheng_TBusRetailDT 里面根据临时表的条件过滤,并把kaicheng_TBusRetailDT 里面日期行转列如果这个没有办法,只能用游标来解决了
      

  3.   


    对了 你的这个 @temp 是个表变量,还是只是一个 变量呀
      

  4.   

    楼主,临时表是#TEMPTB这样用的,你那个明显是表变量,如果是临时表就像你现在这样写,但是如果是表变量则要用引号和加号来进行连接
      

  5.   

    DECLARE @a VARCHAR(10)
    SET @a='#t'
    declare @sql varchar(max)
    SELECT @sql='select * into '+@a+' from sys.sysobjects'
    EXEC (@sql)
    这样试试,不过EXEC完了之后临时表就会消失,所以如果你后续还需要用的话,就不要用临时表
      

  6.   


    对了 你的这个 @temp 是个表变量,还是只是一个 变量呀表变量,,,
      

  7.   


    对了 你的这个 @temp 是个表变量,还是只是一个 变量呀表变量,,,哦 那上面就不能写成 : [@temp] 而是只能写成:@temp另外,还有一个我问题是,在一个普通语句中,表的名称是不能用变量来表示的,也就是不能用@temp来表示,除非是在动态拼接的语句中,也就说你只能把下面的语句,都变成动态语句才行:
    set @temp = '##ddd'
    set @sql = 'select style as ' + '款号'
    select @sql = @sql + ' , sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then qty else 0 end)  [' + dbo.GetWeekRange(billdate) + '周零售数量],'
    +' sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount else 0 end)  [' + dbo.GetWeekRange(billdate) + '周成交金额]'
    +', sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount-qty*fob else 0 end)  [' + dbo.GetWeekRange(billdate) + '周毛利]'
    from (select distinct CONVERT(varchar(10),datepart(week,billdate)) as billdate from kaicheng_TBusRetailDT 
    where style in (select style from [@temp])--select @sql = @sql +@temp  )
    ) as a order by billdate
    set @sql = @sql + ' from kaicheng_TBusRetailDT where  style in (select style from '+  @temp+') group by style '
    select @sql
    exec(@sql)
      

  8.   

    我错了,,@temp只是一个变量,,不是值变量,不好意思
      

  9.   


    哦,呵呵,没事。对了,这样的话,也有问题,下面这句就错了:where style in (select style from [@temp])
      

  10.   

    是呀,,where style in (select style from [@temp]),,这句话错误,,不知道要如何改正确
      

  11.   


    改了一下,你试试:set @temp = '##ddd'-------------------增加
    declare @sql_t nvarchar(1000)set @sql_t = 'select style from ['+@temp+']'
    if OBJECT_ID('tempdb..#temp_123') is not  null
       drop table #temp_123
       
    create table #temp_123(style varchar(100))insert into #temp_123
    exec(@sql)
    ----------------------
    set @sql = 'select style as ' + '款号'
    select @sql = @sql + ' , sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then qty else 0 end)  [' + dbo.GetWeekRange(billdate) + '周零售数量],'
    +' sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount else 0 end)  [' + dbo.GetWeekRange(billdate) + '周成交金额]'
    +', sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount-qty*fob else 0 end)  [' + dbo.GetWeekRange(billdate) + '周毛利]'
    from (select distinct CONVERT(varchar(10),datepart(week,billdate)) as billdate from kaicheng_TBusRetailDT 
    where style in (select style from #temp_123)
      

  12.   

    create table #temp_123(style varchar(100))
     
    insert into #temp_123这个固定值,等下2个同时使用,我怕冲突,,我才使用变量,,
      

  13.   


    改一下,用表变量:
    set @temp = '##ddd'-------------------增加
    declare @sql_t nvarchar(1000)set @sql_t = 'select style from ['+@temp+']'   
    declare @temp_123 table(style varchar(100))insert into @temp_123
    exec(@sql)
    ----------------------
    set @sql = 'select style as ' + '款号'
    select @sql = @sql + ' , sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then qty else 0 end)  [' + dbo.GetWeekRange(billdate) + '周零售数量],'
    +' sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount else 0 end)  [' + dbo.GetWeekRange(billdate) + '周成交金额]'
    +', sum(case CONVERT(varchar(10),datepart(week,billdate)) when ''' + billdate + ''' then Fmount-qty*fob else 0 end)  [' + dbo.GetWeekRange(billdate) + '周毛利]'
    from (select distinct CONVERT(varchar(10),datepart(week,billdate)) as billdate from kaicheng_TBusRetailDT 
    where style in (select style from @temp_123)