【问题标题】:Create view in stored procedure in a file在文件的存储过程中创建视图
【发布时间】:2015-06-25 06:55:50
【问题描述】:

我需要将创建视图和存储过程放在一个 sql 文件中。另一个文件只执行存储过程。我尝试了下面的方法,但它不起作用。我该怎么做?

第一个文件:

CREATE PROCEDURE usp_top10Products
AS

exec ('CREATE VIEW vw_top10Products as
    SELECT Top 10 p.productID, p.productName as Product_Name,    inv.quantitySold as Quantity_Sold,
           (inv.sellingPrice - inv.costPrice)*inv.quantitySold as Profit 
    FROM Product p JOIN
         Inventory inv
         ON p.productID = inv.productID
    ORDER BY Profit Desc')

BEGIN
select *
from vw_top10Products;
END
GO

第二个文件:

EXECUTE usp_top10Products;

【问题讨论】:

  • 为什么要在存储过程中创建视图?您应该设计一个提供预期输出的程序或只是一个视图。这种组合对我来说毫无意义(或者我们需要更多信息吗?)
  • 我想这是非常奇怪的方法。你真的需要在存储过程中创建视图吗?每次运行此 sp 时,您的过程都会尝试创建一个视图,因此第一次它可以成功,但之后每次肯定都会失败。那么为什么需要这个程序呢?
  • doesn't work - 详细说明。它对我有用...
  • 我的最终结果是在我运行存储过程时打印出前 10 个产品,有什么更好的方法呢?
  • 您不需要视图来执行此操作。只需直接在 soretd 过程中使用相同的代码即可。

标签: sql-server stored-procedures sql-server-2012


【解决方案1】:

避免在存储过程中创建视图。如果您只需要打印出您的SELECT,您只需执行SELECT

CREATE PROCEDURE usp_top10Products
    AS

        SELECT Top 10 p.productID, p.productName as Product_Name,    inv.quantitySold as Quantity_Sold,
                   (inv.sellingPrice - inv.costPrice)*inv.quantitySold as Profit 
        FROM Product p JOIN
                 Inventory inv
                 ON p.productID = inv.productID
        ORDER BY Profit Desc

        GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 2011-12-04
    • 2012-01-28
    • 2011-08-04
    • 1970-01-01
    • 2015-05-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多