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