使用存储过程创建视图

时间:2011-10-10 12:25:09

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

此问题之前已经问过几次,遗憾的是我没有得到我的问题的答案。

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

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

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

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

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

附加要求。

一个。如果我在Employee Expense表中有一个员工的多个条目,那么View中应该有很多行,

湾即使我在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])

请帮忙。

3 个答案:

答案 0 :(得分:10)

如果要在SP中创建视图,则需要使用动态SQL。

像这样。

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

create view...代码必须作为字符串参数发送到exec,并且通过它的外观,您已经拥有视图所需的代码,因此只需将其嵌入{{1}之间}}

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

'

答案 1 :(得分:4)

我在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
    ')

答案 2 :(得分:1)

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