Какую версию SQL-сервера вы используете?
В зависимости от серьезности ошибки, другой ловкий прием, который вы можете попытаться отловить, - это обернуть все, что подозрительно, в блоки TRY / CATCH....
CREATE TABLE [dbo].[ERROR_LOGGING](
[ErrorNumber] [int] NULL,
[ErrorSeverity] [int] NULL,
[ErrorState] [int] NULL,
[ErrorProcedure] [nvarchar](128) NULL,
[ErrorLine] [int] NULL,
[ErrorMessage] [nvarchar](4000) NULL,
[UpdateStamp] [datetime] NULL DEFAULT ( getdate() )
) ON [PRIMARY]
Затем поместите свой код в блок try / catch.
BEGIN TRY
--Code---
END TRY
BEGIN CATCH
INSERT INTO ERROR_LOGGING (
errornumber,
errorseverity,
errorstate,
errorprocedure,
errorline,
errormessage,
updatestamp)
VALUES (
ERROR_NUMBER(),
ERROR_SEVERITY(),
ERROR_STATE(),
ERROR_PROCEDURE(),
ERROR_LINE(),
ERROR_MESSAGE(),
getdate())
END CATCH;
Это позволит отследить любые ошибки выше уровня серьезности 16 и вставить их в созданную таблицу.на первом шаге.
Предупреждение о том, что блоки try / catch не улавливают ошибки низкого уровня.
Я несколько раз видел, что данные в исходной или целевой таблицеотличается от ожидаемого, то есть странных символов, текста вместо целых чисел и т. д. Если вы все еще не можете взломать его, запустите трассировку SQL Server Profiler для базы данных во время выполнения процедуры.
Это не должнодолго, чтобы найти проблему.Я не буду вдаваться в то, как использовать SQL Server Profiler, так как вам нужно всего лишь выполнить быстрый веб-поиск, чтобы найти сотни подробных руководств.