2011-10-18 71 views
4

需要做一個存儲過程,將在表上做一個簡單的搜索,加上有3個參數,前兩個是日期範圍,第三個是如果不同於NULL將包括在在哪裏,如果等於NULL,那麼不會尋求這個值,因爲我可以做這個搜索?在存儲過程中的一個簡單的查詢

+2

'WHERE @參數1 =可樂@參數2 = COLB AND(@參數3爲空或@參數3 = COLC)' – SQLMason

回答

1
Where @parameter1 = ColA 
AND @parameter2 = ColB 
and ISNULL(@parameter3, ColC) = ColC 
0
WHERE @parameter IS NULL or field = @parameter 
0

是的!您可以通過將三個變量傳遞給主機程序並使用它們編寫自定義的CURSOR SELECT來實現。然後open the cursorthrow the resultset。您的搜索結果現在可以使用了。如果需要語法幫助,請回復您使用的主機語言和規範。發佈挑戰和解決方案,你可以獲得同樣的幫助,可以幫助其他人。

+2

什麼?不,考慮到標籤的上下文(SQL Server),該答案甚至沒有意義, – billinkc

0

請嘗試以下操作。請注意,如果Column3可能爲null,那麼您需要在列名稱上使用isnull()函數,以及不能比較空值。所以如果Column3的數據類型是int,那麼你可以使用:and isnull(Column3,0)= isnull(@ param3,isnull(Column3,0))。

create procedure Test 
    @param1 varchar(50), 
    @param2 varchar(50), 
    @param3 varchar(50) = null 
as 
begin 
    select * 
    from Table1 
    where Column1 = @param1 
    and Column2 = @param2 
    and Column3 = isnull(@param3, Column3) 
end 
0

我正在使用冒險工程數據庫。

CREATE PROCEDURE upContactDetails 
     @FirstName [nvarchar](50), 
     @LastName [nvarchar](50), 
     @MiddleName [nvarchar](50) 
    AS 
    BEGIN 
    SET NOCOUNT ON; 
    SELECT  Title 
      , FirstName 
      , MiddleName 
      , LastName 
      , EmailAddress 
    FROM  Person.Contact 
    WHERE (@MiddleName IS NULL or MiddleName = @MiddleName) 
      AND FirstName = @FirstName 
      AND LastName = @LastName 
    END 
    GO 
0

想象一下,您有一個交易表,您可以在其中存儲交易號碼和交易日期,如下所示。

CREATE TABLE [dbo].[TrnMast](
    [TrnNo] [numeric](10, 0) NOT NULL, 
    [AcYear] [int] NOT NULL, 
    [Comp_Code] [varchar](5) NOT NULL, 
    [InvNo] [varchar](20) NULL, 
    [TrnDate] [datetime] NULL, 
    [P_Code] [varchar](5) NULL, 
    [Amount] [money] NULL, 
    [Remark] [varchar](50) NULL 
CONSTRAINT [PK_TrnMast_1] PRIMARY KEY CLUSTERED 
(
    [TrnNo] ASC, 
    [Comp_Code] ASC, 
    [AcYear] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

現在看存儲過程與3個參數有兩個日期範圍參數和TrnNo下面。

CREATE PROCEDURE [dbo].[SP_TrnMast] 
    @FTrnDate SmallDateTime = Null, 
    @TTrnDate SmallDateTime = Null, 
    @AcYear Int 
AS 
Begin 
     Select * From TrnMast   
     Where (@FTrnDate Is Null Or TrnMast.TrnDate >= @FTrnDate) 
      And (@TTrnDate Is Null Or TrnMast.TrnDate <= @TTrnDate) 
      And TrnMast.AcYear = @AcYear 

End