DECLARE   @sql  nvarchar(max),
          @xxxxx int ,
          @Pdate varchar(100)
 
set @Pdate=1308
set @xxxxx=( select count(id) from  [1308]   )
 --这里正常SET @sql = N' 
SET @xxxxx=(select count(id)   from '+QUOTENAME(@Pdate) +'  )
'
EXEC sp_executesql @sql 
 
PRINT @xxxxx当表名为为动态时出错,后面需要调用@xxxxx  ,帮忙看下正确的语句是什么?

解决方案 »

  1.   

    DECLARE   @sql  nvarchar(max),
              @xxxxx int ,
              @Pdate varchar(100)
    set @Pdate=1308
    set @xxxxx=( select count(id) from  [1308]   )
     --这里正常SET @sql = N'SET @xxxxx=(select count(id)   from '+QUOTENAME(@Pdate) +')'
    EXEC sp_executesql @sql ,N'@xxxxx int output',@xxxxx=@xxxxx output 
     
    PRINT @xxxxx
      

  2.   

    DECLARE   @sql  nvarchar(max),
              @xxxxx int ,
              @Pdate varchar(100)
     
    set @Pdate='1308'
    set @xxxxx=( select count(id) from  [1308]   )
     --这里正常SET @sql = N'DECLARE  @xxxxx int;
    SET @xxxxx=(select count(id)   from '+QUOTENAME(@Pdate) +'  )
    '
    EXEC sp_executesql @sql 
     
    PRINT @xxxxx
      

  3.   

    这样就可以了:
    DECLARE   @sql  nvarchar(max),
              @xxxxx int ,
              @Pdate varchar(100)
     
    set @Pdate=1308
    --set @xxxxx=( select count(id) from  [1308]   )
     --这里正常SET @sql = N' 
    SET @xxxxx=(select count(id)   from '+QUOTENAME(@Pdate) +'  )
    '
    --select @sql--前一个是@xxxxx是输出参数,后一个是上面定义的参数,用来存储前一个参数的值
    EXEC sp_executesql @sql,N'@xxxxx int output',@xxxxx = @xxxxx output 
     
    PRINT @xxxxx
      

  4.   

     
    --#1.
    DECLARE  @sql  nvarchar(max),
            @xxxxx int ,
            @Pdate varchar(100)
    SET @sql = N' 
    SET @xxxxx=(select count(id)   from '+QUOTENAME(@Pdate) +'  )
    '
    EXEC sp_executesql @sql, N'@xxxxx int out', @xxxxx out --要把变量传进去,并且标明是out类型(可传出)
      
    PRINT @xxxxx--#2.
    DECLARE  @sql  nvarchar(max),
            @xxxxx int ,
            @Pdate varchar(100)
    SET @sql = N' 
    select @xxxxx=count(id)   from '+QUOTENAME(@Pdate) +'  )
    '
    EXEC sp_executesql @sql, N'@xxxxx int out', @xxxxx out
      
    PRINT @xxxxx