首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能在它上声明表时创建视图

我不能在它上声明表时创建视图
EN

Stack Overflow用户
提问于 2015-02-15 05:09:38
回答 2查看 59关注 0票数 0

这段代码在我的软件中显示了提醒工具,但是在我的程序中我使用了EF,现在我想在C#中创建视图并使用它。

代码语言:javascript
复制
CREATE VIEW s AS
(
DECLARE @ta AS TABLE(NAME NVARCHAR(30),qty INT,so INT,tar INT) 
INSERT INTO @ta 
SELECT p.Name,t.Qty,t.Source,t.target FROM dbo.Products p
JOIN dbo.TradeOff t ON t.ProductId = p.ProductID 
DECLARE @source AS TABLE(NAME NVARCHAR(30),qty INT,so INT) 
DECLARE @tar AS TABLE(NAME NVARCHAR(30),qty INT,tar INT) 

INSERT INTO @source 
SELECT t1.NAME,SUM(t1.qty),t1.so  FROM @ta t1
GROUP BY t1.so,t1.NAME

INSERT INTO @tar 
SELECT t1.NAME,SUM(t1.qty),t1.tar  FROM @ta t1

GROUP BY t1.tar,t1.NAME

SELECT s.NAME,ISNULL(t.Qty,0 )-ISNULL(s.qty,0),ISNULL(t.tar,s.so) FROM @tar t 
RIGHT JOIN @source s ON s.so=t.tar AND s.NAME=t.NAME 
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-15 05:16:29

不能在table variable中使用view。试一试这个

代码语言:javascript
复制
CREATE VIEW s
AS
  SELECT s.NAME,
         Isnull(t.Qty, 0) - Isnull(s.qty, 0),
         Isnull(t.tar, s.so)
  FROM   (SELECT t1.NAME,
                 Sum(t1.qty),
                 t1.tar
          FROM   (SELECT p.NAME,
                         t.Qty,
                         t.Source,
                         t.target
                  FROM   dbo.Products p
                         JOIN dbo.TradeOff t
                           ON t.ProductId = p.ProductID) t1
          GROUP  BY t1.tar,
                    t1.NAME) t
         RIGHT JOIN (SELECT t1.NAME,
                            Sum(t1.qty),
                            t1.so
                     FROM   (SELECT p.NAME,
                                    t.Qty,
                                    t.Source,
                                    t.target
                             FROM   dbo.Products p
                                    JOIN dbo.TradeOff t
                                      ON t.ProductId = p.ProductID) t1
                     GROUP  BY t1.so,
                               t1.NAME) s
                 ON s.so = t.tar
                    AND s.NAME = t.NAME 
票数 0
EN

Stack Overflow用户

发布于 2015-02-15 10:12:59

如果您需要使用表变量,您可以使用一个存储过程来实现表值函数,但是这些功能要慢一些,然后是视图,并且取决于您想要在何处使用数据,可以确定哪种解决方案最适合您的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28523203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档