【问题标题】:Creating a View using stored procedure使用存储过程创建视图
【发布时间】:2011-12-04 11:46:28
【问题描述】:

这个问题以前问过几次,很遗憾我的问题没有得到答案。

我有两个 SQL (SQL SERVER 2008) 表,Employee 和 Employee expens,其中 Employee Id 分别是主键和外键。

员工表列, 1. 员工 ID(P 键) 2. 经理 3. 地点 4. 加入日期 5. 姓名

Employee Expense 表列, 1. 费用编号(P 键) 2. 员工编号(F 键) 3. 费用类型 4. 费用金额 5. 费用日期。

问题是,我想创建一个要在 SharePoint Web 部件中使用的视图,我将在其中查询两个表,所以我的要求是使用以下列创建一个视图,

我需要来自员工的员工 ID 和姓名。 从员工费用中我需要费用类型、费用金额、费用日期。

其他要求。

一个。如果我在员工费用表中有多个员工条目,那么视图中应该有很多行

b.即使我在 Employee Expense 表中没有条目,那么我也应该在视图中获取该特定 Employee 的行,Employee Expense 表列的值为 null。

请帮我继续...

编辑按照 Stack Overflow 成员的指示添加所需的视图代码!!

CREATE VIEW ExpenseView AS (
    SELECT [Employee Expense].[Employee ID], Employee.[First Name], [Employee Expense].[Expense Type],[Employee Expense].[Expense Amount],[Employee Expense].[Expense Date]
            FROM Employee,[Employee Expense]
        WHERE [Employee Expense].[Employee ID] = Employee.[Employee ID])

请帮忙。

【问题讨论】:

  • 您的问题是什么?向我们展示你的尝试......
  • 你试过什么?如果您想按要求执行代码,那么您应该聘请顾问。 Stack Overflow 旨在帮助解决特定问题。
  • 对不起,我知道对于新手来说,堆栈溢出没有帮助。谢谢...
  • @Jithu - JNK 向您解释的是,您需要向我们展示您已经付出了一些努力来尝试自己解决这个问题。否则,看起来你来这里是为了让别人为你工作。
  • @Jithu - 欢迎新手! 帮助吸血鬼不是。只是表明你试图自己解决它。当您发布一个实际上只是一个需求列表的“问题”时,期望有人为您解决它,您不太可能获得好的帮助。

标签: sql sql-server-2008 sql-view


【解决方案1】:

如果您想从 SP 中创建视图,您需要使用动态 SQL。

类似的东西。

create procedure ProcToCreateView 
as
exec ('create view MyView as select 1 as Col')

create view... 代码必须作为字符串参数发送到 exec,从外观上看,您已经拥有视图所需的代码,因此只需将其嵌入到 ' 之间。

我真的不知道你为什么需要它。也许您只需要知道如何使用来自 SP 的视图

create procedure ProcToUseView
as
select Col
from MyView

【讨论】:

  • 当然,在现实生活中,您不应该从存储过程中创建视图。如果您想这样做,则表明您做错了。视图创建一次,不需要重复创建。
  • HLGM 是我们产品性能测试的一部分,在实际情况下我们真的没有使用它。感谢您的帮助...
  • @HLGEM 我不同意。我们有一个自动创建特定数据库、其中的一些标准表和视图的过程。在 SP 中创建视图对此很有用。
【解决方案2】:

我在我的 SQL 数据库中使用以下动态 SQL 代码来创建一个带有存储过程的视图。它工作正常:

    CREATE PROCEDURE uspCreateView
    AS
    EXEC ('

    CREATE VIEW vwDataLayoutFileAssignment
    AS

    SELECT b.FileID, d.FieldID
    FROM [File] b, DataLayoutFileAssignment c, [Field] d
    WHERE b.DriverFileID = c.FileID
    AND C.DataLayoutID = d.DataLayoutID
    ')

【讨论】:

    【解决方案3】:

    Using Joins from MS BOL

    来自close page

    但是,外部连接条件可能与 WHERE子句搜索条件,取决于是否加入 条件位于 FROM 或 WHERE 子句中。因此,能够 在 WHERE 子句中指定 Transact-SQL 外连接不是 推荐,不再记录,将来会被删除 释放。

    这样你的代码就变成了:

    CREATE VIEW ExpenseView AS
    BEGIN
       SELECT [Employee Expense].[Employee ID], Employee.[First Name], [Employee Expense].[Expense Type],[Employee Expense].[Expense Amount],[Employee Expense].[Expense Date]
       FROM Employee
       LEFT OUTER JOIN [Employee Expense]
       ON [Employee Expense].[Employee ID] = Employee.[Employee ID]
    END
    

    【讨论】:

    • 嗨,杰米,感谢您的宝贵时间。这里的问题是,如何将创建视图函数的整个过程放入存储过程中!!
    • 现在您正在完全改变您的问题。你用谷歌搜索或搜索过这个吗?当我用谷歌搜索“从 SP SQL 创建视图”时,列出的第二个命中是对此的详细描述。
    • 嗨,杰米,您的问题确实对我提到的另外两个问题有所帮助。然而,真正的问题是从存储过程创建一个视图。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2017-09-15
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多