我有一个插入数千行的存储过程,如果任何行中存在错误数据,则会失败。我在while循环中执行插入操作,如果有一种方法可以让它吐出存储过程失败的行,那就太好了。查询和循环是这样的:
WHILE @rownum > 1
BEGIN
INSERT INTO dbo.bestsellers (id, name, datastring, country)
VALUES (@id, @name, @datastring, @country)
END
有没有办法让它把它吐出@id,@ name,@ datastring,@ country数据,因为数据不好导致它失败?
答案 0 :(得分:0)
您可以使用TRY CATCH结构,并在CATCH块中引发一个自定义错误消息,其中包含变量的所有值以及其中的@rownum
。
答案 1 :(得分:0)
尝试使用Try Catch Block并记录Catch Block中的信息。
请参阅此链接以获取样本: https://msdn.microsoft.com/en-us/library/ms175976.aspx
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
答案 2 :(得分:0)
以下try catch块应该有效:
BEGIN TRY
WHILE @rownum > 1
BEGIN
INSERT INTO dbo.bestsellers (id, name, datastring, country)
VALUES (@id, @name, @datastring, @country)
END
END TRY
BEGIN CATCH
PRINT '================================================';
PRINT 'ERROR: @rownum=' + cast(@rownum as varchar) + ' @name=' + @name + ' @datastring=' + @datastring + ' @country=' + @country;
PRINT '================================================';
THROW
END CATCH;