【问题标题】:How to perform IF ELSE THEN T-SQL?如何执行 IF ELSE THEN T-SQL?
【发布时间】:2021-07-25 13:36:36
【问题描述】:

是否可以在 SQL Server 中执行 IF ELSE THEN ?

例如我想执行IF我的查询结果是NOT NULL(我的行是存在的)。会继续THEN声明

ELSE如果我的查询结果是NULL(我的行是不存在的),它将继续另一个THEN语句

对于 T-SQL 示例,这只是虚拟 SQL 脚本

IF (SELECT * FROM TABLE_A) IS NOTNULL THEN
(INSERT INTO TABLE_B)
ELSE
(DIDN'T PERFORM ANY QUERY)

谢谢

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 复制或键入问题中的文本。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。并且请只标记SQL Server的相关版本,不要标记多个。
  • 我假设你已经阅读了docs,那么他们不清楚呢?看来您需要对伪代码进行的唯一更改是使用 exists 而不是 notnull
  • @DaleK 对不起,是的,现在很清楚了。

标签: sql sql-server tsql sql-server-2008 sql-server-2012


【解决方案1】:

您可以检查表是否返回任何行,然后执行 SELECT INTO 操作

IF EXISTS (SELECT 1 FROM TABLE_A)
BEGIN 
    SELECT * INTO TABLE_B FROM TABLE_A
END;

【讨论】:

    【解决方案2】:

    您可以在INSERTWHERE 子句中使用SELECT 语句,如下所示:

    INSERT INTO TABLE_B(...)
        SELECT ...
            FROM ...
            WHERE EXISTS(SELECT * FROM TABLE_A);
    

    然后用IF @@ROWCOUNT > 0 THEN 测试是否插入了任何东西。

    【讨论】:

      【解决方案3】:

      假设您只想将特定行从 A 插入 B,那么您可以使用:

      INSERT INTO TABLE_B ( . . . )   -- list the columns here
          SELECT . . .
          FROM TABLE_A;
      

      如果没有行,则不会插入任何内容。就是这么简单。

      其实,比这更简单。使用 IF 在您的代码中引入竞争条件。 TABLE_A 可以在IFINSERT 的执行之间发生变化,因此代码不是线程安全的。这段代码没有这个问题。

      【讨论】:

        猜你喜欢
        • 2015-12-13
        • 2010-09-08
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多