[英]SQL Server Stored Procedure with varchar parameter returns wrong results
我創建了一個存儲過程,該存儲過程的參數類型為varchar(5)
。 我的存儲過程運行良好,並返回了正確的結果,直到我將其傳遞給它的字符串是6個或更多字符為止。
發生的情況是它忽略了第6個以上的字符,僅基於前5個字符返回了結果,這是錯誤的結果。 我希望在傳遞更長的字符串時會引發錯誤。
這是一個錯誤還是有辦法更改SQL Server的這種行為?
create procedure usp_testproc
@param1 varchar(5)
as
begin
if @param1 = '12345'
begin
select 'you got this right'
end
else
begin
select 'String Mismatch'
end
end
不管我們是否打電話
exec usp_testproc '12345'
要么
exec usp_testproc '123456'
我們得到相同的結果
varchar(5)
這意味着您將僅獲得前5個字符,因此它將忽略其余的字符,“()”內部的數字表示將在此參數中存儲多少個符號。 您可以確保使用可以從過程中返回的最長字符串,這很好,這是您可以閱讀的一些附加內容: char和varchar(docs.microsoft)
您需要指定輸入參數的正確類型:
create procedure usp_testproc @param1 varchar(<max number of chars here>)
as...
根據存儲過程內部執行的操作,該存儲過程運行良好。 該錯誤在您的實現中。 您的SP最多接受5個字符長的字符串,但是您希望它可以處理超過5個字符的字符串,這是矛盾的。 因此,您必須修改SP才能獲得所需的結果,您可以輕松地將varchar
參數的長度增加到可接受的范圍,以使輸入不超過該范圍。 因此,您可以執行以下操作:
create procedure usp_testproc @param1 varchar(50)
as
begin
if len(@param1)<6
begin
if @param1='12345'
begin
select 'you got this right'
end
else
begin
select 'String Mismatch'
end
end
else
begin
select 'Parameter length is high!'
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.