簡體   English   中英

具有varchar參數的SQL Server存儲過程返回錯誤結果

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

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