2016-01-20 114 views
-1

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

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

我不知道如果我可以离开的日期,因为它们是在视图或如果需要做一些其他的方式。另外,我将如何去从vCompanyInfo中选择数据,并使用FROM和TO日期进行过滤。

编辑:

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

+2

闻起来像[XY问题](http://meta.stackexchange.com/a/66378) – Serpiton

回答

1

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

例如

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

如果somecolumn不vCompanyInfo定义可用,那么您必须使用下划线查询,可以创建这个专栏的一个新视图,或创建UDF或存储过程来传递参数

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 
+0

我会在我看来什么?我会不会过滤它?基本上我现在在我的过滤器中使用两个日期。这个查询看起来类似于我在Access中所做的。我在寻找已售商品的数据。因此,我在VIEW中有一列是SOLD项目的SUM,另一列不可见是TransactionDate,其中(FILTER)在2015年1月1日到2015年12月1日之间。所以我的问题是,我没有在VIEW中包含任何硬编码日期? – barry17

+1

如果增加价值,您可以包含硬编码日期。例如,如果您想设置可以返回值的上限和下限。那些硬编码限制将与SP中应用的任何过滤结合使用。如果您希望可以搜索全部范围的值,请在没有过滤器的情况下离开视图。 –

+0

如果视图仅用于向此SP提供数据,则可以将视图逻辑移动到SP中,然后放下视图。当@Serpiton提到XY时,这就是他/她所谈论的。没有上下文,很难提供好的建议。 –