Discussion:
Saber qué procedure (y sus parámetros) se está ejecutando
(demasiado antiguo para responder)
Victor
2003-08-08 09:51:30 UTC
Permalink
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.
Emilio Boucau
2003-08-08 12:21:33 UTC
Permalink
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
Victor
2003-08-11 17:39:44 UTC
Permalink
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"
Post by Emilio Boucau
Victor,
fn_get_sql
DBCC INPUTBUFFER
Javier Loria(MVP)
2003-08-12 02:23:53 UTC
Permalink
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.
Post by Victor
Vale.
CREATE PROCEDURE dbo.sppadre AS
GO
CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS
@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"
Post by Emilio Boucau
Victor,
fn_get_sql
DBCC INPUTBUFFER
Javier Loria(MVP)
2003-08-13 00:33:04 UTC
Permalink
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.
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\)"
Post by Javier Loria(MVP)
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
agregando la siguiente sentencia, al final de tu procedimiento hijo,
y veras que el la columna EventInfo debe venir la informacion de
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.
Post by Victor
Vale.
CREATE PROCEDURE dbo.sppadre AS
GO
CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS
@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"
Post by Emilio Boucau
Victor,
fn_get_sql
DBCC INPUTBUFFER
Victor
2003-08-13 14:29:53 UTC
Permalink
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\)"
Post by Javier Loria(MVP)
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.
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\)"
Post by Javier Loria(MVP)
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
agregando la siguiente sentencia, al final de tu procedimiento hijo,
y veras que el la columna EventInfo debe venir la informacion de
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.
Post by Victor
Vale.
CREATE PROCEDURE dbo.sppadre AS
GO
CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS
@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"
Post by Emilio Boucau
Victor,
fn_get_sql
DBCC INPUTBUFFER
Victor
2003-08-13 14:35:33 UTC
Permalink
Lo he probado, y puede ser que sí que sirva.... en cuanto sepa cómo
interpretarlo bien.


On Tue, 12 Aug 2003 18:33:04 -0600, "Javier Loria\(MVP\)"
Post by Javier Loria(MVP)
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.
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\)"
Post by Javier Loria(MVP)
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
agregando la siguiente sentencia, al final de tu procedimiento hijo,
y veras que el la columna EventInfo debe venir la informacion de
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.
Post by Victor
Vale.
CREATE PROCEDURE dbo.sppadre AS
GO
CREATE PROCEDURE dbo.sphijo
(
@padre int
)
AS
@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"
Post by Emilio Boucau
Victor,
fn_get_sql
DBCC INPUTBUFFER
Loading...