# Stored Procedure 傳入參數的雷 ( 限制長度過短,傳入的變數字串會自動截斷 ) ###### tags: `SQL` ## Script ``` ALTER PROCEDURE [dbo].[spGetNewQuestionCode] @CategoryCode varchar(2), @SubjectCode varchar(3), @SkillRuleCode varchar(2) AS Declare @ErrorMessage nvarchar(max) = N'' -- validate parameters. IF LEN(@CategoryCode) > 2 BEGIN SET @ErrorMessage = @ErrorMessage + N'類別代碼只能傳入 2 碼。' END IF LEN(@SubjectCode) > 3 BEGIN SET @ErrorMessage = @ErrorMessage + N'科目代碼只能傳入 3 碼。' END IF LEN(@SkillRuleCode) > 2 BEGIN SET @ErrorMessage = @ErrorMessage + N'技能規範代碼只能傳入 2 碼。' END IF LEN(@ErrorMessage) > 0 BEGIN RAISERROR(@ErrorMessage,16,1) RETURN END BEGIN -- Do Something.... END ``` ## 執行 ``` Exec [spGetNewQuestionCode] @CategoryCode = 'AB', @SubjectCode = 'CDEFG', @SkillRuleCode = '01' ``` ## 發生何事 @SubjectCode 明明傳入 'CDEFG',卻沒有檢查出「科目代碼只能傳入 3 碼。」的錯誤! ### 讓我們在檢查前 PRINT @SubjectCode 出來看看 ``` PRINT @SubjectCode ``` ### 結果  **What The Fork…** 他自己截斷了後面的 FG... ## 解 將變數設為 nvarchar(max) 再好好檢查吧!設成 char(3) 是沒有用的
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up