【问题标题】:How to return a view data using stored procedure如何使用存储过程返回视图数据
【发布时间】:2011-12-05 03:43:24
【问题描述】:

朋友们,要求是使用存储过程我应该从视图中返回所有值。

目前我们有一个存储过程来返回给定表中的所有值,

CREATE PROCEDURE [dbo].[SuperGas_GetAllEmployees] 
    AS
BEGIN

SELECT [Employee ID]
      ,[First Name]
      ,[Last Name]
      ,[Group]
      ,[Location]
      ,[DOB]
      ,[DOJ]
      ,[Manager]
      ,[Projects]
      ,[Phone]
      ,[Extension]
  FROM [SuperGas].[dbo].[Employee]
END

我们通过连接两个名为 ExpenseView 的表创建了一个视图,

CREATE VIEW [dbo].[ExpenseView] AS
SELECT Emp.[Employee ID], Emp.[First Name],Emp.[Last Name],Emp.Manager, Ep.[Expense Type],Ep.[Expense Amount],Ep.[Expense Date]
FROM [Employee Expense] as Ep
FULL JOIN Employee as Emp
ON EP.[Employee ID] = Emp.[Employee ID]

现在这里的问题就像在第一个存储过程中一样,如何使用存储过程返回上述视图(Expense)的所有列。 我们尝试使用与第一个过程相同的方法;但是查询中未标识 View ExpenseView。

历史,

从我之前的问题中我了解到,将视图与存储过程一起使用是不好的。

但是我们的应用程序使用下面的 c# 代码通过存储过程从数据库中获取数据,

string spName = "SuperGas_GetAllEmployees";

 DataSet ds = GetDatasetFromAdapter(spName);

改变这一点需要大量的时间和额外的编码资源。因此有什么方法可以返回整个视图(就像我们在给定程序 SuperGas_GetAllEmployees 中所做的那样),以便我可以使用当前代码本身。

感谢大家的帮助

编辑 ....

CREATE PROCEDURE [dbo].[SuperGas_GetAllExpenseView] 
    AS
BEGIN

    SELECT [Employee ID]
      ,[First Name]
      ,[Last Name]
      ,[Manager]
      ,[Expense Type]
      ,[Expense Amount]
      ,[Expense Date]
  FROM [SuperGas].[dbo].[ExpenseView]
END

GO

这里我收到了 Expense Type、Expense Amount、Expense Date 字段和视图名称 ExpenseView 的错误

请帮帮我

【问题讨论】:

  • 您可以发布您尝试创建的从视图中选择的过程的代码吗?
  • 与表格相同。你是什​​么意思the View ExpenseView is not identified in the query.
  • 当然和我做的一样让我编辑问题。
  • 你为什么会这样想“从我之前的问题中我了解到,将视图与存储过程一起使用不好”?作为 SQL 查询查询表或视图的结果和作为 SP 的结果获取数据集之间没有区别(好吧,但从代码的角度来看非常小)。
  • 您遇到了什么错误?顺便说一句,这样问对你没有帮助 - 我有问题,请帮助我。

标签: c# sql sql-server sql-view


【解决方案1】:
CREATE VIEW [dbo].[ExpenseView] AS

实际上视图是在哪里创建的?在您的存储过程中,您使用FROM [SuperGas].[dbo].[ExpenseView] 能否请您确保视图在[SuperGas]

【讨论】:

  • 感谢您的宝贵时间,我很抱歉这是我的错误,虽然我收到错误 Invalid object,如果我执行该过程它将起作用,因为我收到了错误,所以我没有执行并检查.对带来的麻烦表示抱歉。你能告诉我如何结束这个问题吗?
  • @Jithu 好吧。如果它帮助您找到错误,请您投票并接受我的回答。我将投票结束这个问题。结束您的问题需要总共 5 票。
  • 我很乐意,但我无法投票赞成这个问题,因为我的最低声誉没有 15。顺便说一句,我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2017-04-05
  • 2017-12-29
  • 2021-11-23
相关资源
最近更新 更多