Si no puede recorrer el código, aquí hay dos maneras:
# 1 concatenar una cadena e insertarla en un archivo de registro.
Declarar una variable como: información de depuración
DECLARE @Loginfo varchar(7500)
anexados en él a medida que avanza a través del código:
SET @LogInfo=ISNULL(@LogInfo)+'#01> @x='+COALESCE(CONVERT(varchar(10),@x),'NULL')
..
SET @LogInfo=ISNULL(@LogInfo)+'#02>'
..
SET @LogInfo=ISNULL(@LogInfo)+'#03> top loop'
en todos los puntos de salida (después de las reversiones) añadir:
INSERT INTO YourLogTable VALUES (..., @ LogInfo)
dependiendo del uso de la transacción y su error en particular, puede insertar muchas veces sin temor a deshacerse, por lo que necesitará cambiar esto a su situación.
# 2 de escritura a un archivo de texto en el servidor cuadrados
esto puede no ser una opción, ya que utiliza el procedimiento almacenado xp_cmdshell muy inseguro. Sin embargo, si se puede usar eso y si las transacciones de la aplicación de llamadas están causando un problema intente crear este procedimiento almacenado:
CREATE PROC log_message
@Message varchar(255)
,@FileName varchar(100)
,@OverWrite char(1) = 'N'
AS
/*
Log messages to server side text files from stored procedures/triggers/sql scripts
Input parameters:
Message - message to put in the log file
FileName - path and name of the file to log the message into
OverWrite - 'Y'=overwrite entire file with current message
'N'=append current message onto end of file
Return code:
0 - everything was fine
1 - there was an error
NOTE: the command to log the message can not be longer than 255 characters,
as a result the message and file name should be less than 245 chars combined
Example: EXEC log_message 'Duplicates found','C:\logfile.txt', 'N'
append the "Duplicates found" message onto the server's "C:\logfile.txt" file
*/
BEGIN
SET NOCOUNT ON
DECLARE @ExecuteString VARCHAR(255) --command string can only be 255 chars long
DECLARE @ReturnValue int
--build command string
SET @ExecuteString = RTRIM('echo ' + COALESCE(LTRIM(@Message),'-')
+ CASE WHEN (@OverWrite = 'Y') THEN ' > ' ELSE ' >> ' END + RTRIM(@FileName))
--run command string
EXEC @ReturnValue=master..xp_cmdshell @ExecuteString
--IF @ReturnValue!=0
-- PRINT 'command failed, return value='+CONVERT(varchar(40),@ReturnValue)
RETURN @ReturnValue
SET NOCOUNT OFF
END
espolvorear llama a este procedimiento de éstos a través de su código de escribir lo que necesita en un archivo en el servidor
El artículo vinculado muestra cómo adjuntar y depurar un procedimiento almacenado como necesito (+1), sin embargo, supone que el proceso de conexión es ASP.NET. En mi caso es una aplicación Java, así que necesito un poco más de información ... –
El enlace muestra cómo depurar con Visual Studio. Realmente no necesita ningún código. Solo tiene que ir al menú Ver-> Server Explorer y agregar la conexión en la pestaña "explorador del servidor". No estoy seguro de que pueda hacer lo mismo con cualquier entorno de desarrollo Java (Especialmente si usa SQL Server .... :(...) – Lucas
Se aceptó esta respuesta ya que explica cómo adjuntar a un procedimiento almacenado en ejecución que era el punto de la pregunta. Gracias. –