首页 > 解决方案 > 如果没有其他程序

问题描述

我有以下程序:

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;

标签: sqlsql-serverstored-procedures

解决方案


如果您不使用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只有第二个查询将运行。

既然你不问如何解决它(只问发生了什么)我没有给出解决方案


推荐阅读