使用VIEWS将参数传递给存储过程?

时间:2016-01-20 14:01:10

标签: sql-server stored-procedures

我创建了一个VIEW,我试图传递2个日期参数,但是,我知道这是不可行的。目前,VIEW使用2个硬编码日期'介于' 1/1 2015'和2015年12月1日'。我需要做的是使用视图中的数据填充表格,然后让它按这两个日期过滤。日期将由用户在VB应用程序中输入。所以现在我有

Create Procedure [dbo].[spCompanyInfo]
AS
@FromDate
@ToDate
Insert into tblTempTable(companyID, companyName, TotalBegInv)
Select CompanyID, CompanyName, TotalBegInv
From vCompanyInfo

我不确定我是否可以将日期保留在VIEW中,或者是否需要以其他方式进行。另外,我将如何从使用FROM和TO日期过滤的vCompanyInfo中选择数据。

编辑:

我试图将ACCESS的报告复制到SQL-SERVER。在ACCESS中我以前有多个查询,我用它来创建一个FINAL QUERY并生成报告。我试图用SQL SERVER做同样的事情。因为我没有广泛的知识,所以我尝试使用相同的思想,通过使用视图。所以我复制了这些观点,并提出了一个最终观点。我试图从中提取数据,直到我遇到了我无法在VIEWS中使用参数的问题。

2 个答案:

答案 0 :(得分:2)

视图没有参数。但是,从视图中选择数据的过程可以使用WHERE子句中的参数。

您尚未指定日期参数要过滤的列的名称,并且您已经做了一些其他语法错误,但我认为这是您正在寻找的粗略近似值:

CREATE PROCEDURE [dbo].[Spcompanyinfo]
(
  @FromDate DATETIME,
  @ToDate   DATETIME
)
AS
    INSERT INTO tblTempTable (companyID,companyName,TotalBegInv)
    SELECT CompanyID,
           CompanyName,
           TotalBegInv
    FROM   vCompanyInfo
    WHERE  SomeColumn BETWEEN @FromDate AND @ToDate

答案 1 :(得分:1)

您无法将参数传递给视图,如果要传递参数,则必须使用表值UDF。否则,您需要将所有列都可用于要应用过滤器的视图。

e.g。

INSERT INTO tblTempTable (companyID,companyName,TotalBegInv)
    SELECT CompanyID,
           CompanyName,
           TotalBegInv
    FROM   vCompanyInfo
    WHERE  SomeColumn BETWEEN @FromDate AND @ToDate

如果某个列在vCompanyInfo定义中不可用,则必须使用下划线查询,并且可以使用此列创建新视图,也可以创建UDF或存储过程来传递参数