我试图在存储过程(SQL Server 2012)中创建可选参数,这将允许用户选择以下选项。SQL - 使用多个可选参数创建存储过程
参考号码范围 - 持有表2 - (可选)
客户号码范围 - 在表中保存3 - (可选)
日期范围 - 在表中保存4 - (强制性)
无论是参考编号或客户编号必须输入
到目前为止,我有这个
declare @RefFrom Varchar(50) = NULL --'F51'
declare @RefTo Varchar(50) = NULL --'F51'
declare @CustomerNumFrom Varchar(50) = NULL --'FH1'
declare @CustomerNumTo Varchar(50) = NULL --'FH1'
declare @fromDate date -- Works for date ranges
declare @toDate date
set @fromDate = '2014-10-01'
set @toDate = '2014-11-05'
set @toDate = IIF(@toDate is NULL, @toDate , DATEADD(day,1,@toDate))
set @toDate = IIF(@toDate is NULL, @fromeDate, @toDate)
SELECT
Table2.Ref AS [Ref],
Table3.Number AS [Customer Number],
Table4.FromDate AS [Date],
Table4.ToTime AS [Time],
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
INNER JOIN Table3 ON Table2.ID = Table3.ID
INNER JOIN Table5 ON Table1.DatID = Table5.ID
INNER JOIN Table4 ON Table5.ID = Table4.ID
where Table1.StatID = 1
AND Table4.ID
IN (
select Table4.ID
from Table4
where
(
CONVERT(DATETIME, CONVERT(CHAR(8), Table4.Date, 112) + ' ' + CONVERT(CHAR(8), Table4.Time, 108)) >= @fromDate
AND
CONVERT(DATETIME, CONVERT(CHAR(8), Table4.Date, 112) + ' ' + CONVERT(CHAR(8), Table4.Time, 108)) <= @toDate
)
AND
Table4.Info = 1
AND
(
(Table2.Ref >= @RefFrom) OR (@RefFrom IS NULL)
AND
(Table2.Ref <= @RefTo) OR (@RefTo IS NULL)
)
AND
(
(Table3.Number >= @CustomerNumFrom) OR (@CustomerNumFrom IS NULL)
AND
(Table3.Number <= @CustomerNumTo) OR (@CustomerNumTo IS NULL)
)
)
我现在遇到了一些问题。
这是不工作的第一件事情是,我可以有两个参考和CUSTOMERNUMBER在空,我还是会得到返回的数据基础上的日期范围,
这是不工作的第二件事是当我输入一个CustomerNumber范围时,它将返回指定范围之外的CustomerNumers。
我真的很憋屈如何
嗨欢呼你的答案我现在已经得到了第二部分的工作。 – 2014-12-05 12:19:25
关于第一部分,如果用户没有输入参考号码和客户号码,则不应返回任何数据。用户将不得不至少输入其中一个选项,因此目前正在进行的操作并不理想! – 2014-12-05 12:21:13
感谢您对CONVERT的观点我会看看其他选项以及日期时间比较:) – 2014-12-05 12:26:52