如何检测发生了哪个值错误?
How to detect on which value error occured?
假设我有一个存储过程,它试图检查值是否属于日期时间类型并将其转换为日期。
我正在使用 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
假设我有一个存储过程,它试图检查值是否属于日期时间类型并将其转换为日期。
我正在使用 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