我正在使用 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) 如果这是问题。但商店栏将显示日期范围之间的销售额。