sql – 在存储过程中选择all if参数为空
|
我想在SQL Server中创建一个将选择并连接两个表的过程.参数@company,@from和@to始终设置,但@serie_type可以为NULL.如果@serie_type不为NULL,我只想包括指定的类型,简单AND S.Type = @serie_type,但如果@serie_type为NULL,我想包括所有类型,简单,只是不包括AND语句.我的问题是,我不知道如果@serie_type将被设置,因此我想要有这样的东西: /* pseudocode */ ??? = AND (IF @serie_type IS NOT NULL S.Type = @serie_type) 这是一个简单的程序版本: CREATE PROCEDURE Report_CompanySerie
@company INT,@serie_type INT,@from DATE,@to DATE
AS
BEGIN
SELECT
*
FROM Company C
JOIN Series S ON S.Company_FK = C.Id
WHERE C.Id = @company
AND S.Created >= @from
AND S.Created <= @to
/* HERE IS MY PROBLEM */
AND ???
END
GO
不想复制选择,因为真正的选择是更大的这个. 解决方法没有必要做AND(@serie_type IS NULL OR S.Type = @serie_type),因为SQL Server有一个内置函数来为你做这个逻辑.尝试这个: . . AND S.Type = isnull( @serie_type,S.Type) 这返回 如果@serie_type为空,则为true,否则为@serie_type = S.Type如果@serie_type为空,则为true. 从MSDN:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 仅当字符串以数字值开头时才选择字符串的数字部分
- sql-server – 使用DISTINCT作为子查询中的提示有用吗?
- MySQL操作之JSON数据类型操作详解
- sql-server – 不使用子查询的不同行的计数
- SQL SERVER 2014 安装图解教程(含SQL SERVER 2014下载)
- sql-server – CASE构造的奇怪行为
- sql-server-2008 – T-SQL(MS SQL 2008),没有“EXEC”或“E
- sql – DB2:如何在DB2中连接空字符串?
- 如何在sql server 2005中使用多个值的条件?
- 在SQL Server中更改int类型的列以键入text
