Sql server 如何在sql过程中使用“is not null”作为变量的输入
我创建了一个过程,该过程将使用特定日期或空日期进行筛选,如: 结算日期='2014-03-05' 结算日期不为空 结算日期为空 我的问题是如何让@settledate这样的变量接受这三个输入中的任何一个Sql server 如何在sql过程中使用“is not null”作为变量的输入,sql-server,stored-procedures,Sql Server,Stored Procedures,我创建了一个过程,该过程将使用特定日期或空日期进行筛选,如: 结算日期='2014-03-05' 结算日期不为空 结算日期为空 我的问题是如何让@settledate这样的变量接受这三个输入中的任何一个 create procedure sp_transaction_details @ticker nvarchar(7), @account nvarchar(3), @settledate nvarchar(20) as select TrxDate AS [Date], case
create procedure sp_transaction_details
@ticker nvarchar(7),
@account nvarchar(3),
@settledate nvarchar(20)
as
select TrxDate AS [Date],
case buysell when 'b' then Lot end AS [BuyingQty],
......
from Transaksi where Ticker = @ticker and AID = @account AND SettleDate = @settledate
;
我需要3个选项,因为我想知道:
有特定日期的交易
已结算的交易
尚未结算的交易
请帮助我,谢谢。如果我正确理解了您的需要-将日期参数定义为
@settledate nvarchar(20) = null,
这样,在没有日期可传递的情况下调用SP时—如果确实是日期,则可以完全忽略调用中的参数—将其声明为date或DateTime
然后将您的条件定义为
AND (@settledate IS NULL OR SettleDate = @settledate)
这意味着:如果未传递任何日期-返回所有日期。如果日期已过-将其用作过滤器我从下面的链接中找到了答案,并根据我的情况进行了调整:
很有效,谢谢。但是,第三个选项不为NULL如何?@xpw但是,所传递的特定日期与所传递的任何非NULL日期之间有什么区别?仍然会将日期用作筛选?可能是我的问题不清楚,所以我在提到我需要什么的地方编辑了我的问题。我从stackoverflow.com/questions/13858239/…找到了答案,感谢Yuriy的回答,这是可能的答案之一。
ALTER PROCEDURE sp_transaction_details @ticker nvarchar(7),
@account nvarchar(3),
@options int, @settledate nvarchar(10) = NULL AS if(@settledate IS NOT NULL) BEGIN
SELECT TrxDate AS [Date],
CASE buysell
WHEN 'b' THEN Lot
END AS [BuyingQty],
......
FROM Transaksi
WHERE Ticker = @ticker
AND AID = @account
AND SettleDate = @settledate END ELSE if(@options = 1) BEGIN
SELECT TrxDate AS [Date],
CASE buysell
WHEN 'b' THEN Lot
END AS [BuyingQty],
......
FROM Transaksi WHERE Ticker = @ticker
AND AID = @account
AND SettleDate IS NULL END ELSE if(@options = 2) BEGIN
SELECT TrxDate AS [Date],
CASE buysell
WHEN 'b' THEN Lot
END AS [BuyingQty],
......
FROM Transaksi WHERE Ticker = @ticker
AND AID = @account
AND SettleDate IS NOT NULL END ;