T-SQL找出导致错误的行

时间:2016-09-15 19:15:57

标签: sql-server tsql

我有一个插入数千行的存储过程,如果任何行中存在错误数据,则会失败。我在while循环中执行插入操作,如果有一种方法可以让它吐出存储过程失败的行,那就太好了。查询和循环是这样的:

WHILE @rownum > 1
BEGIN
    INSERT INTO dbo.bestsellers (id, name, datastring, country)
    VALUES (@id, @name, @datastring, @country)
END

有没有办法让它把它吐出@id,@ name,@ datastring,@ country数据,因为数据不好导致它失败?

3 个答案:

答案 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;