存储过程中的简单查询

时间:2011-10-18 00:55:13

标签: sql sql-server sql-server-2008 stored-procedures

需要创建一个对表进行简单搜索的存储过程,加上有3个参数,前两个是日期范围,第三个是如果不同于NULL将包含在WHERE中,如果等于NULL然后我没有寻求那个价值,因为我可以做这个搜索?

8 个答案:

答案 0 :(得分:1)

试试这个..
Create Prucedure test

@p1 int,@p2 int,@p3 nvarchar(50)

As

Begin

If @p3 is null

Select * from table where field1=@p1 and field2=@p2

Else
Select * from table where field1=@p1 and field2=@p2 and field3=@p3
End

抱歉格式不正确,这是因为我正在通过手机发送答案

答案 1 :(得分:1)

Where @parameter1 = ColA 
AND @parameter2 = ColB 
and ISNULL(@parameter3, ColC) = ColC

答案 2 :(得分:0)

WHERE @parameter IS NULL or field = @parameter

答案 3 :(得分:0)

是的!您可以通过将三个变量传递给宿主程序并使用它们编写自定义CURSOR SELECT来实现。然后是open the cursorthrow the resultset。您的搜索结果现在可以使用了。如果需要语法帮助,请使用您正在使用的主机语言和规范进行恢复。发布您所获得的挑战和解决方案,可以帮助他人。

答案 4 :(得分:0)

尝试以下方法。请注意,如果Column3可以为null,那么您需要在列名上使用isnull()函数,并且无法比较空值。因此,如果Column3的数据类型是int,那么您可以使用:和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

答案 5 :(得分:0)

您尝试执行的操作的一般形式是动态查询。请参阅此问题中的解决方案update statement not executing

答案 6 :(得分: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

答案 7 :(得分: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 Below。

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