2016-01-20 171 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時,這就是他/她所談論的。沒有上下文,很難提供好的建議。 –

相關問題