我创建了一个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中使用参数的问题。
答案 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或存储过程来传递参数