sql-server - 变量为空时选择空数据 SQL Server
问题描述
我想将一个变量传递给 SQL Server 中的存储过程,当它为空时,它应该返回所有为空的行。
我找不到任何对我有帮助的东西。
如果我将 null 传递给变量,它不会返回任何内容,因为您需要说IS NULL
DECLARE @itemId INT = 5435
DECLARE @id INT = NULL
SELECT
rt.Id,
'Received' as Type,
rt.Quantity,
rt.CuttingInstuctionId,
rt.Date
FROM
ReceivingItemsTransactions rt
LEFT JOIN
Order ci ON rt.OrderId = ci.Id
WHERE
rt.ItemId = @itemId
AND ci.PlannedProductionId = @id
我希望在这种情况下只得到空行。
有什么替代方法?
解决方案
使用 OR 条件来测试两者
declare @itemId int = 5435
declare @plannedProdId int = null
SELECT rt.Id,
'Received' as Type,
rt.Quantity,
rt.CuttingInstuctionId,
rt.Date
FROM ReceivingItemsTransactions rt
left join CuttingInstructions ci
on rt.CuttingInstuctionId = ci.Id
where rt.ItemId = @itemId and
(
(ci.PlannedProductionId = @plannedProdId)
OR (@plannedProdId IS NULL AND ci.PlannedProductionId IS NULL
)
或者你可以使用工会?
declare @itemId int = 5435
declare @plannedProdId int = null
SELECT rt.Id,
'Received' as Type,
rt.Quantity,
rt.CuttingInstuctionId,
rt.Date
FROM ReceivingItemsTransactions rt
left join CuttingInstructions ci
on rt.CuttingInstuctionId = ci.Id
where rt.ItemId = @itemId and
(ci.PlannedProductionId = @plannedProdId)
UNION ALL
SELECT rt.Id,
'Received' as Type,
rt.Quantity,
rt.CuttingInstuctionId,
rt.Date
FROM ReceivingItemsTransactions rt
left join CuttingInstructions ci
on rt.CuttingInstuctionId = ci.Id
where rt.ItemId = @itemId and (@plannedProdId IS NULL AND ci.PlannedProductionId IS NULL)
推荐阅读
- angular - 将 Angular 应用程序部署到具有更改的 baseHref 缺少文件的服务器
- c# - C# 通过 ADOMD 异步运行 MDX 查询
- javascript - 如何:一列上的文本,另一列上的图像,仅使用引导 div?(浮动不工作,绝对定位工作但文本重叠)
- java - Visual Studio Code 是否提供过程/片段来创建类似于 Eclipse 的新 Java 类文件?
- java - Java 监听 UDP 端口
- spring - 在 @Configuration 注释类之前运行 Mongock
- c# - 使用文件操作c#以XML异步写入数百万条记录
- python - 如果顺序可能发生变化,如何使用 python 替换几个单词?
- angular - 从角度的主要组件运行测试
- typescript - monorepo 中的打字稿路径别名