0

我正在使用 SQL Server 2008,我正在尝试根据用户的选择创建一个临时表。

declare @x nvarchar(max), @mgchk int, @sgchk int, @ssgchk int, @seasonchk int, @vendorchk int, @storeid varchar(10), @trsfrom date, @trsto date

set @trsfrom = '1/1/12'
set @trsto = '1/1/13'
set @mgchk = 1
set @sgchk = 1
set @ssgchk = 1
set @seasonchk = 1
set @vendorchk = 1

set @x = 'create table ##aa ('

if @mgchk = 1
    set @x = @x + 'MainGroup varchar(20),'
if @sgchk = 1
    set @x = @x + 'SubGroup varchar(20),'
if @ssgchk = 1
    set @x = @x + 'SubSubGroup varchar(20),'
if @seasonchk = 1
    set @x = @x + 'Season varchar(20),'
if @vendorchk = 1
    set @x = @x + 'VendorID varchar(20),'

declare storecr Cursor scroll for
select distinct storeid from RPTrs where TRSDate between @trsfrom and @trsto
open storecr 
fetch next from storecr 
into @storeid 
while @@FETCH_STATUS = 0 begin
set @x = @x + @storeid + ' decimal(15,2),'
fetch next from storecr 
into @storeid 
end 
close storecr 
deallocate storecr

set @x = @x + 'Total decimal(15,2))'

execute sp_executesql @x

select * from ##aa

但是,当我运行它时出现这些错误:

消息 102,级别 15,状态 1,第 1 行
'01' 附近的语法不正确。
消息 208,级别 16,状态 0,第 47 行
无效的对象名称“##aa”。

最终输出应基于在@trsfrom 和@trsto 日期范围之间进行交易的商店数量。因此,如果在那段时间有 3 家商店进行销售,我要查找的结果是(01、02 和 03 是商店名称):

MainGroup | SubGroup | SubSubGroup | Season | Vendor | 01 | 02 | 03 | Total
----------------------------------------------------------------------------
          |          |             |        |        |    |    |    |

RPTrs 中的 StoreID 字段是 varchar(5) 如果这是问题。但商店栏将显示日期范围之间的销售额。

4

1 回答 1

0

想通了问题。我的光标内的集合丢失了 [ ]

set @x = @x + '[' + @storeid +']' + ' decimal(15,2),'
于 2013-02-14T21:39:24.377 回答