Capturar error de Bulk Insert?

Buenas Tardes,
Estoy realizando un Bulk Insert con un archivo .txt y tengo las instrucciones del bulk insert en una cadena, el archivo plano lo arme con valores erróneos entonces por consiguiente no carga ningún registro, pero quiero recuperar el error para mostrarlo al usuario. Pero al ejecutar la cadena nunca entra al catch.
Si alguien me puede colaborar agradezco su ayuda.

Quiero capturar el error.


Pero si lo ejecuto de la siguiente manera me muestra el mensaje
TRUNCATE TABLE dbo.Tb_Capability
BULK INSERT dbo.Tb_Capability FROM 'C:\Directorio\Capability.txt' WITH (FIELDTERMINATOR= ';', ROWTERMINATOR='\n' , CODEPAGE='ACP');
mensaje


Msg 4864, Level 16, State 1, Line 2
Error de conversión de datos de carga masiva (tipo no coincidente o carácter no válido para la página de códigos especificada) en la fila 1, columna 4 (CAPABILITY1).


ALTER PROCEDURE [dbo].[SP_ProCargarArchivo]
@p_path as nvarchar(max)='C:\Directorio\Capability.txt',
@TipoArchivo as nvarchar(50)='Capability'
AS
DECLARE @CADENA AS NVARCHAR(MAX),
@CountReg as int
BEGIN
SET NOCOUNT OFF
BEGIN TRY
BEGIN TRANSACTION
SET @CADENA =''
SET @CountReg=0
IF @TipoArchivo='Capability'
BEGIN
SET @CADENA ='TRUNCATE TABLE dbo.Tb_Capability'+
' BULK INSERT dbo.Tb_Capability '+
' FROM ''' + @p_path + ''' '+
' WITH (FIELDTERMINATOR= '';'', '+
' ROWTERMINATOR=''\n'' '+
' , CODEPAGE=''ACP'');'
SELECT @CountReg=Count(*) FROM Tb_Capability
END
print @CADENA
EXEC (@CADENA)
--SELECT @CountReg
IF @CountReg=0
BEGIN
SELECT 'No se cargo ningún registro' AS estado
END
ELSE
BEGIN
SELECT 'OK' AS estado
END
COMMIT TRANSACTION
END TRY
BEGIN CATCH
select CAST(ERROR_MESSAGE() AS NVARCHAR(MAX)) as estado
PRINT CAST(ERROR_MESSAGE() AS NVARCHAR(MAX))
ROLLBACK TRANSACTION
END CATCH
END

Añade tu respuesta

Haz clic para o