I am trying to run a store procedure works fine in windows but the deployment server is linux with mssql server service running in it I am doing error logging using BCP I found that xp_cmdshell is deprecated
is there any alternate ways I can log errors to text file in Linux. here’s what I tried so far
CREATE PROCEDURE FactDataProcedure
AS
BEGIN
DECLARE
@ErrorCount INT = 0,
@Body NVARCHAR(MAX),
@Cmd NVARCHAR(4000),
@CurrentDate NVARCHAR(128);
SET @CurrentDate = CONVERT(NVARCHAR(10), GETDATE(), 120);
SET @Body = 'An error has occurred in the SQL script. Please check the error log of File name : FactDataProcedureErrorLog_'+@CurrentDate+'.txt for details.';
-- Inserting
BEGIN TRY
BEGIN TRANSACTION;
-- SQL Query here
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
EXEC LogSingleError;
SET @ErrorCount = @ErrorCount + 1;
END CATCH;
IF @ErrorCount > 0
BEGIN
SET @Cmd = 'bcp "SELECT ErrorMessage,ErrorProcedure,ErrorLine,ErrorTime FROM DB.dbo.ErrorLog WHERE ErrorProcedure = ''DataProcedure'' AND CONVERT(DATE, ErrorTime) = CONVERT(DATE, GETDATE()) " queryout "C:SQLErrorsDataProcedureErrorLog_' + @CurrentDate + '.txt" -c -t, -S ServerName -T -a 65535';
EXEC xp_cmdshell @Cmd;
END
END;
--LogSingleError
CREATE PROCEDURE LogSingleError
AS
BEGIN
DECLARE
@ErrorMessage NVARCHAR(MAX),
@ErrorSeverity INT,
@ErrorState INT,
@ErrorProcedure NVARCHAR(128),
@ErrorLine INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-'),
@ErrorLine = ERROR_LINE();
-- Insert the error details into the temporary error log table
INSERT INTO ErrorLog (ErrorMessage, ErrorSeverity, ErrorState, ErrorProcedure, ErrorLine)
VALUES (@ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorProcedure, @ErrorLine);
END;
I don’t want to create a separate job for logging either