我有一個插入成千上萬行的存儲過程,如果在任何行中有錯誤的數據,它會失敗。我在while循環中執行插入操作,如果有一種方法可以讓它吐出存儲過程失敗的那一行,那就好了。查詢和循環是這樣:T-SQL找出哪個行導致錯誤
WHILE @rownum > 1
BEGIN
INSERT INTO dbo.bestsellers (id, name, datastring, country)
VALUES (@id, @name, @datastring, @country)
END
有沒有辦法把它吐出來的@id,@name,@datastring,@country在它被壞數據失敗由於數據?
創建第一清潔數據(try_parse,測試DATALENGTH()等的處理。)然後運行你的過程。或者,您可以讓一個進程刪除將失敗的數據,將其插入到審計表中,然後使用通過檢查的數據運行插入。 – dfundako
這在我的情況下是不可能的 - 這是一個被移交給我的過程,以解決這個存儲過程。另一個原因是@datastring實際上是一個完整的查詢,我不能'解析',直到它在存儲過程中的下一步實際上被執行爲dyn sql。 –
如果可能,您應該考慮重寫這個基於循環的過程,將其作爲一組數據插入。 RBAR(排成行)效率不高。 –