Saber qué procedure (y sus parámetros) se está ejecutando

08/08/2003 - 11:51 por Victor | Informe spam
Hola.

Si mal no recuerdo, creo que hay un comando (que no recuerdo) para
saber qué Stored Procedure se está ejecutando.

Mi problema es que un SP llama a otro SP, el cual puede llamar a otro
SP, y así hasta 4 SP. Resulta que el último actualiza un contador es
una tabla en la que puede llegar a ser negativo. Y esto es malo para
mi.

Se que puedo poner una regla en el campos de la tabla que no deje
negativos, pero lo que necesito es "rastrear" esta cadena de SP y
poder recojer el SP inicial y los parámetros.

¿Se puede?

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Emilio Boucau
08/08/2003 - 14:21 | Informe spam
Victor,

mira en los Books On Line:

fn_get_sql
DBCC INPUTBUFFER

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
Respuesta Responder a este mensaje
#2 Victor
11/08/2003 - 19:39 | Informe spam
Vale.

He creado dos SP:

CREATE PROCEDURE dbo.sppadre AS
exec dbo.sphijo @@spid
GO


CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS

declare @id int

select 'SPID padre:', @padre, ' SPID hijo: ', @@spid
exec sp_who @padre
select * from master.dbo.sysprocesses where spid = @padre or ecid @padre

GO

sppadre llama a sphijjo pasándole su SPID. Me ha parecido entender que
los dos SP tienen SPIDs diferentes, y que sphijo cuelga de sppadre.

Pero el select de sphijo que muestra los SPIDs, me indica el mismo
para los dos ¿?

Y Al ejecutar sp_who, creía que me saldría una línea para el SPID de
sppadre, y otra para sphijo, indicando que éste depende de sppadre.
Pues no me sale la de sphijo (supongo que porque el SPID es el mismo).

Y el select sobre sysprocesses es una prueba para ver que me salía.

¿No han de ser SPIDs diferentes? ¿Dónde me lio?



On Fri, 8 Aug 2003 09:21:33 -0300, "Emilio Boucau"
wrote:

Victor,

mira en los Books On Line:

fn_get_sql
DBCC INPUTBUFFER
Respuesta Responder a este mensaje
#3 Javier Loria\(MVP\)
12/08/2003 - 04:23 | Informe spam
Hola Victor:
El concepto de SPID es System Process ID y esta asociado con el concepto
de conexion. En principio a cada conexion se le asigna un SPID, solo que
debe tenerse cuidado porque son "reciclables".
Entonces un si un SP llama a otro SP siempre tienen el mismo SPID. En tu
caso para el procedimiento sphijo, @@spid siempre es igual a @padre.
No se si esto te sirve, pero puedes probar agregando la siguiente
sentencia, al final de tu procedimiento hijo, y veras que el la columna
EventInfo debe venir la informacion de como se invoco el primer
procedimiento:

DBCC INPUTBUFFER(@@spid)

Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Victor escribio:
Vale.

He creado dos SP:

CREATE PROCEDURE dbo.sppadre AS
exec dbo.sphijo @@spid
GO


CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS

declare @id int

select 'SPID padre:', @padre, ' SPID hijo: ', @@spid
exec sp_who @padre
select * from master.dbo.sysprocesses where spid = @padre or ecid > @padre

GO

sppadre llama a sphijjo pasándole su SPID. Me ha parecido entender que
los dos SP tienen SPIDs diferentes, y que sphijo cuelga de sppadre.

Pero el select de sphijo que muestra los SPIDs, me indica el mismo
para los dos ¿?

Y Al ejecutar sp_who, creía que me saldría una línea para el SPID de
sppadre, y otra para sphijo, indicando que éste depende de sppadre.
Pues no me sale la de sphijo (supongo que porque el SPID es el mismo).

Y el select sobre sysprocesses es una prueba para ver que me salía.

¿No han de ser SPIDs diferentes? ¿Dónde me lio?



On Fri, 8 Aug 2003 09:21:33 -0300, "Emilio Boucau"
wrote:

Victor,

mira en los Books On Line:

fn_get_sql
DBCC INPUTBUFFER
Respuesta Responder a este mensaje
#4 Javier Loria\(MVP\)
13/08/2003 - 02:33 | Informe spam
Hola Victor:
No, pero prueba lo siguiente, abre el Profiler de SQL, escoge FILE-NEW
TRACE, Autentica a tu usuario administrador, luegoseleccionas la pestana de
EVENTs, oprime el buton de Remove hasta que no quede nada del lado derecho.
Busca del lado izquierdo en la seccion de Stored Procedures y agrega
SP:Starting (Ojo que hay un RPC:Starting que no es ese) y oprimer ADD, por
ultimo lo ejecutas con RUN. Si te gusta lo que captura podemos ver como
creamos ese codigo en tu aplicacion.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Victor escribio:
Casi es lo que necesito: en el caso de sppadre pasara parámetros a
sphijo, ¿cómo los puedo recuperar?

On Mon, 11 Aug 2003 20:23:53 -0600, "Javier Loria\(MVP\)"
wrote:

Hola Victor:
El concepto de SPID es System Process ID y esta asociado con el
concepto de conexion. En principio a cada conexion se le asigna un
SPID, solo que debe tenerse cuidado porque son "reciclables".
Entonces un si un SP llama a otro SP siempre tienen el mismo
SPID. En tu caso para el procedimiento sphijo, @@spid siempre es
igual a @padre. No se si esto te sirve, pero puedes probar
agregando la siguiente sentencia, al final de tu procedimiento hijo,
y veras que el la columna EventInfo debe venir la informacion de
como se invoco el primer procedimiento:

DBCC INPUTBUFFER(@@spid)

Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Victor escribio:
Vale.

He creado dos SP:

CREATE PROCEDURE dbo.sppadre AS
exec dbo.sphijo @@spid
GO


CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS

declare @id int

select 'SPID padre:', @padre, ' SPID hijo: ', @@spid
exec sp_who @padre
select * from master.dbo.sysprocesses where spid = @padre or ecid >>> @padre

GO

sppadre llama a sphijjo pasándole su SPID. Me ha parecido entender
que los dos SP tienen SPIDs diferentes, y que sphijo cuelga de
sppadre.

Pero el select de sphijo que muestra los SPIDs, me indica el mismo
para los dos ¿?

Y Al ejecutar sp_who, creía que me saldría una línea para el SPID de
sppadre, y otra para sphijo, indicando que éste depende de sppadre.
Pues no me sale la de sphijo (supongo que porque el SPID es el
mismo).

Y el select sobre sysprocesses es una prueba para ver que me salía.

¿No han de ser SPIDs diferentes? ¿Dónde me lio?



On Fri, 8 Aug 2003 09:21:33 -0300, "Emilio Boucau"
wrote:

Victor,

mira en los Books On Line:

fn_get_sql
DBCC INPUTBUFFER
Respuesta Responder a este mensaje
#5 Victor
13/08/2003 - 16:29 | Informe spam
ayayayayaya.

Esto lo tengo cada vez peor.

Cambio de estrategia.

¿Puedo hacer un trigger (esto se ahcerlo), que al dispararse sepa que
SP (el padre) lo ha ejecutado?


On Tue, 12 Aug 2003 18:33:04 -0600, "Javier Loria\(MVP\)"
wrote:

Hola Victor:
No, pero prueba lo siguiente, abre el Profiler de SQL, escoge FILE-NEW
TRACE, Autentica a tu usuario administrador, luegoseleccionas la pestana de
EVENTs, oprime el buton de Remove hasta que no quede nada del lado derecho.
Busca del lado izquierdo en la seccion de Stored Procedures y agrega
SP:Starting (Ojo que hay un RPC:Starting que no es ese) y oprimer ADD, por
ultimo lo ejecutas con RUN. Si te gusta lo que captura podemos ver como
creamos ese codigo en tu aplicacion.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Victor escribio:
Casi es lo que necesito: en el caso de sppadre pasara parámetros a
sphijo, ¿cómo los puedo recuperar?

On Mon, 11 Aug 2003 20:23:53 -0600, "Javier Loria\(MVP\)"
wrote:

Hola Victor:
El concepto de SPID es System Process ID y esta asociado con el
concepto de conexion. En principio a cada conexion se le asigna un
SPID, solo que debe tenerse cuidado porque son "reciclables".
Entonces un si un SP llama a otro SP siempre tienen el mismo
SPID. En tu caso para el procedimiento sphijo, @@spid siempre es
igual a @padre. No se si esto te sirve, pero puedes probar
agregando la siguiente sentencia, al final de tu procedimiento hijo,
y veras que el la columna EventInfo debe venir la informacion de
como se invoco el primer procedimiento:

DBCC INPUTBUFFER(@@spid)

Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Victor escribio:
Vale.

He creado dos SP:

CREATE PROCEDURE dbo.sppadre AS
exec dbo.sphijo @@spid
GO


CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS

declare @id int

select 'SPID padre:', @padre, ' SPID hijo: ', @@spid
exec sp_who @padre
select * from master.dbo.sysprocesses where spid = @padre or ecid >>>> @padre

GO

sppadre llama a sphijjo pasándole su SPID. Me ha parecido entender
que los dos SP tienen SPIDs diferentes, y que sphijo cuelga de
sppadre.

Pero el select de sphijo que muestra los SPIDs, me indica el mismo
para los dos ¿?

Y Al ejecutar sp_who, creía que me saldría una línea para el SPID de
sppadre, y otra para sphijo, indicando que éste depende de sppadre.
Pues no me sale la de sphijo (supongo que porque el SPID es el
mismo).

Y el select sobre sysprocesses es una prueba para ver que me salía.

¿No han de ser SPIDs diferentes? ¿Dónde me lio?



On Fri, 8 Aug 2003 09:21:33 -0300, "Emilio Boucau"
wrote:

Victor,

mira en los Books On Line:

fn_get_sql
DBCC INPUTBUFFER









Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida