簡體   English   中英

如何檢測哪個值發生錯誤?

[英]How to detect on which value error occured?

想象一下,我有一個存儲過程,它試圖檢查其值是否為datetime類型,並將其轉換為日期。

我正在使用TRY CATCH塊來捕獲是否發生錯誤。 我在CATCH塊中選擇ERROR_LINE()ERROR_MESSAGE()

問題是ERROR_LINE()僅返回發生錯誤的過程的行號(有時返回錯誤的行),而ERROR_MESSAGE()僅返回錯誤的描述,如Conversion failed when converting...

列中有100000多個值,我不知道發生在哪個值上的錯誤。 所以我需要檢查超過100000個值?

無論如何,這里都可以打印錯誤消息+發生錯誤的值?

您可以這樣嘗試:

if(isDate(yourdatevalue))
begin
  --some code
end
else
begin
print yourdate + 'There is an error'
end

您可以將RAISERROR用作:

DECLARE @Test TABLE (id INT, varchardate VARCHAR(200))

INSERT INTO @Test VALUES (1,'200410212'),(2,'A'),(3,'2015-04-24 08:08:01.083')  


DECLARE @err_message nvarchar(255)


DECLARE @varchardate VARCHAR(200), @Id int
DECLARE @getvarchardate CURSOR
SET @getvarchardate = CURSOR FOR
    SELECT varchardate ,id
    FROM @Test
    OPEN @getvarchardate
    FETCH NEXT
    FROM @getvarchardate INTO @varchardate ,@Id
    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF isDate(@varchardate) = 0
        begin
        SET @err_message = @varchardate + ' and ' 
        + CAST (@Id AS VARCHAR(10)) + ' Not valid Date'
        RAISERROR (@err_message, 11,1)
        END
        ELSE
        begin
        SELECT id,varchardate
        FROM @Test  
        END

FETCH NEXT
FROM @getvarchardate INTO @varchardate ,@Id
END
CLOSE @getvarchardate
DEALLOCATE @getvarchardate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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