当前位置: 首页 > 面试题库 >

sql的“选择案例”与“其他”以及关于“ egin”的说明。

於炯
2023-03-14
问题内容

我对t sql的经验很少,我必须写一个存储的。

这是我存储的:

USE myDatabase
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[myStored]
(
@myPar1 INT,
@myPar2 SMALLDATETIME
)

AS

BEGIN
  SET NOCOUNT ON

  IF EXISTS (
            SELECT 
            1

            FROM 
            myTable1

            WHERE 
            myPar1 = @myPar1
            AND myPar2 = @myPar2
            )

    BEGIN
      DELETE FROM  
      myTable1

      WHERE 
      myPar1 = @myPar1
      AND myPar2 = @myPar2
    END

  ELSE

    IF EXISTS (
              SELECT 
              1

              FROM 
              myTable2

              WHERE 
              myPar2 = @myPar2
              )

      BEGIN
        INSERT INTO  
        myTable1
        (myField1, myField2, myField3, myField4)

        VALUES
        (@myPar1, @myPar2, '', 1)
      END

    ELSE

      IF EXISTS (
                SELECT 
                1

                FROM 
                myTable3

                WHERE 
                myPar2 = @myPar2
                )

        BEGIN
          INSERT INTO  
          myTable1
          (myField1, myField2, myField3, myField4)

          VALUES
          (@myPar1, @myPar2, '', 1)
        END
END

这些是我的问题:

1-是否存在宏观误差?

2-有人建议使用“ SELECT CASE”,其他人建议使用“ IF … ELSE”,有什么区别?那我的存储的最佳选择是什么?

3-我不确定使用“ BEGIN … END”语句,特别是结合使用“ IF … ELSE”语句。这是什么意思?是否有必要在“ IF …
ELSE”语句中放入“ BEGIN … END”?还要执行一条指令吗?


问题答案:

对于单个IF语句

IF (Some Condition)     --<-- If condition is true control will get inside the 
 BEGIN                     -- BEGIN ..END Block and execute the Code inisde
   /* Your Code Here*/
 END

所有单个IF语句将独立检查条件。

一击一击

IF (Some Condition)     --<-- If condition is true control will get inside the 
 BEGIN                     -- BEGIN ..END Block and execute the Code inisde
   /* Your Code Here*/     -- IF not true control will jump to Else block
 END
ELSE       --<-- You dont mention any condition here
 BEGIN                    
   /* Your Code Here*/
 END

如果IF true,则仅执行一个代码块,然后执行第一个代码块Otherwsie ELSE代码块。

多个IF和ELSE

IF (Some Condition)     --<--1) If condition is true control will get inside the 
  BEGIN                     -- BEGIN ..END Block and execute the Code inisde
    /* Your Code Here*/     -- IF not true control will check next ELSE IF Blocl
  END
ELSE IF (Some Condition)       --<--2) This Condition will be checked
  BEGIN                    
      /* Your Code Here*/
  END
ELSE IF (Some Condition)       --<--3) This Condition will be checked
  BEGIN                    
     /* Your Code Here*/
  END
ELSE                --<-- No condition is given here Executes if non of
  BEGIN                --the previous IFs were true just like a Default value   
     /* Your Code Here*/
  END

如果条件为真,则仅执行代码的第一块,其余部分将被忽略。

BEGIN ..END块

在执行任何IF,ELSE
IF或ELSE之后,如果要执行多个语句,则必须将它们包装在一个BEGIN..END块中。如果仅执行一条语句,则没有必要,但是始终使用BEGIN
END块是一个好习惯,这样可以更轻松地读取您的代码

您的程序

我已经取出ELSE语句来使每个IF语句独立地检查给定条件,现在您已经有了一些有关如何处理IF和ELSE的想法,因此请自己尝试一下,因为我不知道您到底想在此处应用什么逻辑。

CREATE PROCEDURE [dbo].[myStored]
(
@myPar1 INT,
@myPar2 SMALLDATETIME
)

AS

BEGIN
  SET NOCOUNT ON

  IF EXISTS (SELECT 1 FROM myTable1 WHERE myPar1 = @myPar1
            AND myPar2 = @myPar2)
    BEGIN
      DELETE FROM  myTable1  
      WHERE myPar1 = @myPar1 AND myPar2 = @myPar2
    END


    IF EXISTS (SELECT 1 FROM myTable2 WHERE myPar2 = @myPar2)
      BEGIN
         INSERT INTO  myTable1(myField1, myField2, myField3, myField4)
         VALUES(@myPar1, @myPar2, '', 1)
      END


      IF EXISTS (SELECT 1 FROM myTable3  WHERE myPar2 = @myPar2)
        BEGIN
           INSERT INTO  myTable1(myField1, myField2, myField3, myField4)
           VALUES(@myPar1, @myPar2, '', 1)
        END
END


 类似资料:
  • 问题内容: 我想从列中选择结果,但我需要相应的和。 结果集只需要显示一个,但显示为1且a 为Doe。 问题答案: 试试这个查询

  • 我一直在浏览打字教程来学习打字类。我被困在理解(和,就此而言)。 我遇到的问题是: > 《pedia》说,“可选类型类是为同样具有幺半群结构的应用程序函子设计的。”我不明白,替代品不是意味着完全不同于单倍体吗?i、 e.我理解另类类的意义在于在两个事物之间进行选择,而我理解幺半群是关于组合事物的。 为什么Alternative需要一个

  • 我在文本字段中使用flex来显示我的值/范围。对于IOS,我使用属性adjustsFontSizeToFit和文本的minimumFontScale属性来实现理想的字体大小和缩放。我希望为Android启用相同的缩放。有人使用Android的任何技巧吗?

  • 问题内容: 我需要具有2个字段的django modelform,其中第二个字段选择列表取决于在第一个字段中选择的内容。我的模特: 如果vehicle_type设置为 personal, 如何将 make 字段的选择设置为 PERSONAL_MAKES ?我怎样才能做到这一点?在模型级别上可以吗? __ 问题答案: 您可能不能,因为这取决于用户与表单的交互:您的服务器无法预先知道用户将表单发送到浏

  • 我很难理解领导者、追随者机制是如何工作的,比如说,我正在构建一个分布式应用程序,其中有2个主节点、6个从节点和3个zookeeper节点,其中一个zookeeper节点是领导者,两个主节点中的1个是活动的,并连接到zookeeper领导者。 我的问题是 > 当管理员节点死亡时,是否会发生领导者选举机制?以及它将如何影响我们的主人,我们的主人是否会与新当选的领导人连接? 如果我们的应用程序的主节点死

  • 我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码: