可否将一个动态SQL查询建为一个视图

ltolll 2013-07-15 09:09:10
查询如下(具体查询语句不是重点):
DECLARE @sql varchar(8000)
set @sql = 'SELECT [CusID] '
select @sql = @sql + ', MAX(CASE [GoodSort] WHEN ''' + GoodsSort + ''' THEN SUMRRCus else 0 end) [' + GoodsSort + ']'
FROM (select distinct GoodsSort from GoodsSort) AS G
set @sql = @sql + ' FROM
(SELECT [CusID],[GoodSort],SUM(SUMRR) SUMRRCus FROM
(SELECT [CusID],A.[SaleID],[GoodSort], SUMRR FROM [SaleInfo] A,
(SELECT [SaleID],[GoodSort], SUM([RealReceive]) SUMRR FROM
[SaleDetail] GROUP BY [SaleID], [GoodSort]
) B
WHERE A.[SaleID]=B.[SaleID]
) C GROUP BY [CusID],[GoodSort]
) D
GROUP BY [CusID]'
exec(@sql)

可以查出目标数据,
重点是如何将结果集建为一个视图?

附:
尝试了正常创建视图的方式:
CREATE VIEW [vw_SumRRByCus] AS
DECLARE @sql varchar(8000)
……
exec(@sql)
报错:
服务器: 消息 156,级别 15,状态 1,过程 vw_SumRRByCus,行 2
在关键字 'DECLARE' 附近有语法错误。
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltolll 2013-07-15
  • 打赏
  • 举报
回复
引用 2 楼 SmithLiu328 的回复:
你为什么不用存储过程呢?
因为这个只是个中间结果集。
Andy__Huang 2013-07-15
  • 打赏
  • 举报
回复
没有动态视图,视图里面只能有select语句,不能有declare之类的语句
KevinLiu 2013-07-15
  • 打赏
  • 举报
回复
你为什么不用存储过程呢?
KevinLiu 2013-07-15
  • 打赏
  • 举报
回复
答案是不能的。

A view can contain only a single SQL statement (if more than one should include UNION/EXCEPT/INTERSECTION/etc), it cannot contain variable declarations, assignments, control flow, loops, or any kind of business logic, etc.
Leon_He2014 2013-07-15
  • 打赏
  • 举报
回复

declare @tb table(id int,name varchar(50))
declare @str varchar(1000)='';

set @str='select top 10 number as id,name from  master.[dbo].[spt_values]'

insert  @tb 
Exec (@str)

select * from @tb
楼主可以参考一下上面这种方式

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧