[英]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.