Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在sql过程中使用“is not null”作为变量的输入_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 如何在sql过程中使用“is not null”作为变量的输入

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

我创建了一个过程,该过程将使用特定日期或空日期进行筛选,如:

结算日期='2014-03-05'

结算日期不为空

结算日期为空

我的问题是如何让@settledate这样的变量接受这三个输入中的任何一个

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 ;