【问题标题】:How to check if cell is null by column name in SQL?如何通过SQL中的列名检查单元格是否为空?
【发布时间】:2016-08-17 22:12:34
【问题描述】:

我正在尝试在 SQL 中构建一个存储过程。

我有以下语法:

CREATE PROCEDURE [dbo].[getAllCitizens]
    @NoInfo as nvarchar(50) = "No contact information inserted."
AS
BEGIN
    SET NOCOUNT ON;
    IF ctznPhone != null
        BEGIN
            SELECT ctznTz, ctznLname, ctznFname, ctznPhone
            FROM tblCitizens
            Where ctznLivestat=1
        END
    ELSE
        BEGIN
            IF ctznEml != null
                BEGIN
                SELECT ctznTz, ctznLname, ctznFname, ctznEml
                FROM tblCitizens
                Where ctznLivestat=1
                END
            ELSE
                BEGIN
                    SELECT ctznTz, ctznLname, ctznFname, @NoInfo
                    FROM tblCitizens
                    Where ctznLivestat=1
                END
        END
END

如何知道ctznPhonectznEml列在哪个表中的过程?

我尝试过dbo.tablename.columname 以及()[] 的各种尝试,但它似乎不起作用。

最终,这个过程将被 C# 数据读取器调用。 我要做的是构建一个过程,当被调用时,它将根据特定单元格中的信息从一行中返回选定的单元格:

  • 如果ctznPhone不为空,那么我想得到它。
  • 如果它为空,我想得到ctznEml
  • 如果 THAT 也为 null,我想返回一条消息,指出没有可用的联系信息(我放在 @NoInfo 中的字符串)。

我这样做对吗?

【问题讨论】:

  • COALESCE 是你想要的,但你也应该知道,!= null 是错误的,你想要is not nullis null 这些都是泌尿操作员。

标签: c# sql sql-server tsql stored-procedures


【解决方案1】:

你可以使用COALESCE:

COALESCE(表达式 [ ,...n ] )

按顺序计算参数并返回最初不计算为 NULL 的第一个表达式的当前值。

CREATE PROCEDURE [dbo].[getAllCitizens]
    @NoInfo as nvarchar(50) = "No contact information inserted."
AS
BEGIN
  SET NOCOUNT ON;

  SELECT ctznTz, ctznLname, ctznFname,
         COALESCE(ctznPhone, ctznEml, @NoInfo) AS contactInfo
  FROM tblCitizens
  WHERE ctznLivestat=1;

END

【讨论】:

  • 什么是“AS contactInfo”?这是一个虚构的名称,此信息将在此名称下返回?
  • @NimrodYanai 是的,是表达式的列别名。
  • 太棒了!我不知道为什么我们的老师要我们使用 IIF,而这个 COALESCE 更准确地满足了我们的需求......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多