我已經創建了此存儲過程,它接受參數@UpdType char(1)
。無論輸入什麼參數,該過程都會執行。然而;如果參數是R
或U
,則存儲過程僅完成其功能。SQL - 限制存儲過程輸入參數
是否有一種方法可以將存儲過程限制爲只接受參數R
或U
作爲輸入?
CREATE PROCEDURE UPDATECATS @UPDTYPE CHAR(1)
AS
BEGIN
IF @UPDTYPE = 'U' --UPDATE TO NEW CATEGORIES IF PARAMETER IS R
BEGIN
UPDATE CATLEVEL1
SET CAT1DESC = 'LABORATORY EQUIPMENT'
WHERE CAT1DESC = 'MEDICAL & ALLIED EQUIPMENT'
UPDATE CATLEVEL1
SET CAT1DESC = 'MACHINERY & CAMPUS EQUIPMENT'
WHERE CAT1DESC = 'OTHER MACHINERY & EQUIPMENT'
END
IF @UPDTYPE = 'R' --REVERSE TO OLD CATEGORIES IF THE PARAMETER IS U
BEGIN
UPDATE CATLEVEL1
SET CAT1DESC = 'MEDICAL & ALLIED EQUIPMENT'
WHERE CAT1DESC = 'LABORATORY EQUIPMENT'
UPDATE CATLEVEL1
SET CAT1DESC = 'OTHER MACHINERY & EQUIPMENT'
WHERE CAT1DESC = 'MACHINERY & CAMPUS EQUIPMENT'
END
IF @UPDTYPE = 'R' OR @UPDTYPE = 'U' --UPDATE THE CATEGORIES IN THE ASSETS TABLE
BEGIN
UPDATE ASSETS
SET ASSETS.CAT3 = B.CATLEVEL3LINK
FROM ASSETS A
LEFT JOIN ASSETDESC B ON A.ASDES = B.ASSETDESCRIPTION
UPDATE ASSETS
SET ASSETS.CAT2 = B.CATLEVEL2LINK
FROM ASSETS A
LEFT JOIN CATLEVEL3 B ON A.CAT3 = B.CAT3DESC
UPDATE ASSETS
SET ASSETS.CAT1 = B.CATLEVEL1LINK
FROM ASSETS A
LEFT JOIN CATLEVEL2 B ON A.CAT2 = B.CAT2DESC
END
END
'NOT INT'。您應該處理'NULL' [Demo](https://data.stackexchange.com/stackoverflow/query/451568) – lad2025
用戶定義類型具有已知的可維護性問題,因此考慮到只有兩個值,使用非空值位,就像IsRead好得多。使用位比驗證要好,因爲你的存儲過程有一個更清晰明確的合同 - 並且在解釋時檢測到任何無效值,而不是運行。 – ironstone13