簡體   English   中英

在 SQL 中不使用多個 if else 的多個條件

[英]Multiple conditions without using multiple if else in SQL

我必須在 SQL 中編寫一個具有多個條件的程序,但我不應該用多個 if else 編寫它(因為 if 的成本)。 我是這個領域的新手,我不知道我還能怎么寫它會更好這是我的示例代碼:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA= 'dbo' AND TABLE_NAME = 'Food_tbl')
BEGIN
    IF NOT EXISTS (SELECT TOP 1 FID FROM dbo.Food_tbl)
     BEGIN
        INSERT INTO dbo.Food_tbl
        SELECT *
        FROM DataFoodView                       
     END
    ELSE IF (SELECT COUNT(*) FROM dbo.Food_tbl)=20
     BEGIN
        PRINT N'Table Exists'
        SELECT *
        FROM Food_tbl
     END
    ELSE IF (SELECT COUNT(*) FROM dbo.FoodSara_tbl)<>20
     BEGIN
        print N'there isnt 20'
        INSERT INTO Food_tbl (Food_tbl.FID, Food_tbl.Fname, Food_tbl.Ftype, Food_tbl.Fcount, Food_tbl.Datetype, Food_tbl.Fdescription)
        SELECT DataFoodView.*
        FROM DataFoodView 
        LEFT JOIN FoodSara_tbl ON Food_tbl.FID = DataFoodView.FID
        WHERE Food_tbl.FID IS NULL;     
     END
END

PS:我首先檢查表是否退出,如果沒有任何記錄插入所有數據,如果有 20 條記錄顯示表,如果表沒有 20 條記錄找到丟失的數據然后插入.

首先,不需要 ELSE 部分的條件:change

ELSE IF (SELECT COUNT(*) FROM dbo.FoodSara_tbl)<>20
BEGIN

ELSE
BEGIN

接下來,您可以重新組合這兩個 INSERT 部分,因為沒有元素也有 20 個以外的元素。

結果將是這樣的:

IF EXISTS
(
    SELECT * FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA= 'dbo' AND TABLE_NAME = 'Food_tbl'
)
BEGIN
    IF (SELECT COUNT(*) FROM dbo.Food_tbl)=20
    BEGIN
        PRINT N'Table Exists'
        SELECT *
        FROM Food_tbl
    END
    ELSE
    BEGIN
        print N'there isnt 20'
        INSERT INTO Food_tbl (Food_tbl.FID, Food_tbl.Fname, Food_tbl.Ftype, 
Food_tbl.Fcount, Food_tbl.Datetype, Food_tbl.Fdescription)
        SELECT DataFoodView.*
        FROM DataFoodView 
        LEFT JOIN FoodSara_tbl ON Food_tbl.FID = DataFoodView.FID
        WHERE Food_tbl.FID IS NULL;     
    END
END

從您提供的描述中無法理解確切的要求,但只需查看以下邏輯

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA= 'dbo' AND TABLE_NAME = 'Food_tbl')
BEGIN
    DECLARE @RCount INT
    SELECT @RCount= COUNT(FID) FROM dbo.Food_tbl
    IF @RCount=0
     BEGIN
        //Your Logic 1 (for inserting data since no records found)                     
     END
    ELSE 
     BEGIN
        PRINT N'Table Exists'
        IF @RCount=20
        BEGIN
          //Your Logic 2 
        END
        ELSE
        BEGIN
          //Your Logic 3
        END

     END
   
END 

請詳細解釋要求或根據要求構建查詢並添加代替邏輯 1,2,3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM