Sql Server 存储过程可选参数

原创 2015年07月07日 15:53:54

有如下存储过程


ALTER PROC [dbo].[P_ChannelType] (@CollectBeginDate DATETIME, 
                                  @CollectEndDate   DATETIME,
                                  @Type nvarchar(50)
                                  ) 
AS 
    DECLARE @BeginQueryDate DATETIME 
    DECLARE @EndQueryDate DATETIME 

    SET @BeginQueryDate = Dateadd(day, Datediff(day, '20010101', @CollectBeginDate), '20010101') --获得0SET @EndQueryDate = CONVERT(DATETIME, CONVERT(VARCHAR, @CollectEndDate, 112) , 112) + 1 - 1.0 / 3600 / 24 --获得23:59:59 

    SELECT  a.externalProduct ,
            c.GameChannelName ,
            b.ChannelAccount,
            a.externalProduct,
            '增加' Property,
            SUM(a.num * a.faceValue * ISNULL(b.Discount,1)) AS [Money]
            FROM externalsystempurchaseorder a 
          JOIN dbo.ChannelAccount b ON a.systemAccount = b.ChannelAccount
          JOIN dbo.GameChannel c ON a.systemId = c.GameChannelID
    WHERE purchaseTime >= @CollectBeginDate AND purchaseTime <= @CollectEndDate
          and (@Type is NULL or a.externalProduct = @Type)
    GROUP BY a.externalProduct ,
            a.num ,
            a.faceValue ,
            a.disCount ,
            c.GameChannelName ,
            b.ChannelAccount,
            a.externalProduct

但@Type是一个可选参数,不作为查询条件的时候就给Null
上面关键的一句是

and (@Type is NULL or a.externalProduct = @Type)

就是说当@Type有值的时候,将它作为一个查询条件,没有值的时候就忽略

相关文章推荐

MSSQL中存储过程的可选参数的定义和使用_SQL高亮显示

编辑日志: 160508创建 160530优化添加:显式传参 160916SQL语句高亮显示、格式优化 可选参数的存在,可以极大的降低代码的重复冗余。在数据库开发中,也是如此。现在针对MSSQL...
  • hjnth
  • hjnth
  • 2016年09月16日 10:56
  • 708

SQL SERVER存储过程,参数默认值设置

业务背景:当我们要对存储过程设置一些传入参数时,如果存在传入参数允许不传入,那么为了保证参数的完整性,必须对存储过程的形参设置默认值,那么当执行存储过程,传入实参不完整时,SQL会自动检查是否有对应缺...

SQL Server 存储过程的创建参数

请大家来了解一下存储过程的语法。   Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type ...

SQL Server存储过程Return、output参数及使用技巧

SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000...

SQL Server系统存储过程和参数示例

一些用在SQL 2000的企业管理GUI中,并且不打算用于其他的流程。微软已预计将其中的一些存储过程从未来的SQL Server版本中删除(或已经删除了)。虽然这些存储过程可能很有用并为你节省了很多时...

Sql Server A表汇总到B表存储过程(直接赋参数用,源码)

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO -- -- -- -- -- ...
  • dxnn520
  • dxnn520
  • 2012年06月05日 20:23
  • 1340

SQL Server存储过程 对数组参数的循环处理

SQL Server存储过程 对数组参数的循环处理 方法一 分割 例:通过SQL Server存储过程传送数组参数删除多条记录 eg. ID 值为'1,2,3' 以下存储过程就...

Sql Server 不常见应用之一:获取表的基本信息、字段列表、存储过程参数列表

【推荐】Sql Server 不常见应用之一获取表的基本信息、字段列表、存储过程参数列表 ——通过知识共享树立个人品牌。    一、获取表的基本信息SELECT [TableName] = [Tabl...

SQL Server存储过程数组参数

SQL Server存储过程数组参数    SQL Server存储过程不支持数组参数类型,要传递数量不定的参数,需要采用其他方式进行传递   方法一:利用字符串截取拆分数组字符串 -- =...

SQL SERVER如何获取指定数据库中所有存储过程的参数

SELECT sp.object_Id as FunctionId, sp.name as FunctionName, isnull(param.name,'')as Para...
  • whaxrl
  • whaxrl
  • 2016年04月14日 14:22
  • 779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sql Server 存储过程可选参数
举报原因:
原因补充:

(最多只允许输入30个字)