簡體   English   中英

SQL中的存儲過程

[英]stored procedure in SQL

我有一個存儲過程,應該檢查“ Allowed Nationality表中是否有正在添加的藝術家,但是它不起作用。 該代碼將插入藝術家,無論他們是否在Allowed Nationality表中。 誰能告訴我我做錯了什么?

DELIMITER //
CREATE PROCEDURE `InsertNewArtistCheck`
   (IN newLastName Char(25),
    IN newFirstName Char(25),
    IN newNationality Char(30),
    IN newDateOfBirth Numeric(4),
    IN newDateDeceased Numeric(4))
BEGIN
DECLARE varRowCount Int;
   SELECT Nation INTO varRowCount
   FROM ALLOWED_NATIONALITY
   WHERE Nation = newNationality;

   IF (varRowCount < 0)
   THEN
       ROLLBACK;
          SELECT 'Nationality Not Allowed' AS ErrorMessage;
   END IF;
   INSERT INTO ARTIST (LastName, FirstName, Nationality, 
                       DateOfBirth, DateDeceased)
               VALUES (newLastName, newFirstName, newNationality, 
                      newDateOfBirth, newDateDeceased);
   SELECT 'New artist data added to database' AS InsertStatus;
END//
DELIMITER ;

嘗試以下更改:

 DECLARE varRowCount Int;

       SELECT count(*) INTO varRowCount
       FROM ALLOWED_NATIONALITY
       WHERE Nation = newNationality;

       IF (varRowCount < 1)
       THEN
           ROLLBACK;
           SELECT 'Nationality '+newnationality+' not Allowed' AS ErrorMessage;
           RETURN
       END IF;

您正在嘗試將字符值(NATION)放入數字變量(varRowCount)中。 您真正想要的是確定與新藝術家的國家匹配的國家(希望為1)個國家。 您也不需要ROLLBACK語句,因為存儲過程尚未執行任何需要“撤消”的操作

仍將關閉。

看到這一行:

IF(varRowCount <0)

告訴我您認為SQL Server在什么條件下會返回負數行?

應該等於0,不小於。

暫無
暫無

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

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