sql - 如果没有其他程序
问题描述
我有以下程序:
CREATE PROC spInvTotal2
@DateVar smalldatetime = NULL
AS
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices;
SELECT SUM(InvoiceTotal)
FROM Invoices
WHERE InvoiceDate >= @DateVar;
这里我们有IF语句,但没有ELSE。如果@DateVar IS NULL或@DateVar IS NOT NULL会发生什么?
我们有两个SELECT语句。他们两个都跑吗?
那么如果我插入ELSE代码的含义会是一样的吗?
CREATE PROC spInvTotal2
@DateVar smalldatetime = NULL
AS
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices;
ELSE
SELECT SUM(InvoiceTotal)
FROM Invoices
WHERE InvoiceDate >= @DateVar;
解决方案
如果您不使用begin ... end
此查询,无论如何都会运行
SELECT SUM(InvoiceTotal)
FROM Invoices
WHERE InvoiceDate >= @DateVar;
这意味着在这两种情况下(@DateVar IS NULL
或@DateVar IS NOT NULL
)它都会运行。
我们有两个 SELECT 语句。他们两个都跑吗?
第一个查询仅在满足条件时运行,第二个查询将在两种情况下运行。
结论:
- 如果
@DateVar IS NULL
两个查询都将运行。 - 如果
@DateVar IS NOT NULL
只有第二个查询将运行。
既然你不问如何解决它(只问发生了什么)我没有给出解决方案
推荐阅读
- python - 如何在 python、pandas、geopandas 中提高地理空间数据的循环性能
- apache-kafka - 如何从 apache kafka 调用 springboot 服务端点并传递来自主题的所有消息?
- opencv - 在嘈杂和曝光不足的图像上测量车道或条纹
- php - Wordpress 从菜单交换主菜单
- kotlin - 如何使用 Kotlin 反射按名称调用方法?
- java - 如何管理 RFID
- javascript - 谷歌网站管理员检测到 Vue.js 网站垃圾内容注入
- python - 自然语言处理 - 将结果作为 JSON 对象返回
- node.js - 如何将对象推送到 mongoDB 和 expressjs 中的嵌套对象数组
- linkedin-api - 尝试在 Linkedin 中使用上传的图片时出错