sp_Executesql

02/06/2004 - 09:03 por José Cordero | Informe spam
Hola a todos,
tengo un problema con la función sp_executesql, la utilizo dentro de un
procedimiento almacenado para ejecutar una query a la que se le pasan
parametros, el problema esta en que si ejecuto el procedimiento desde el
analizador de consultas funciona perfectamente, pero cuando lo hago desde el
Visual studio devuelve al tabla siempre vacia.
Hay va parte del código.

exec sp_Executesql @Query,
N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
@ID_Region, @ID_Procedimiento
GO

a ver si alguien me puede dar una solución, gracias

Preguntas similare

Leer las respuestas

#1 Maxi
02/06/2004 - 14:34 | Informe spam
Hola, primero yo me preguntaria poque usas SqlDinamico no? podrias postiar
que hace ese SqlDinamico?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"José Cordero" escribió en el mensaje
news:OV7Fx%
Hola a todos,
tengo un problema con la función sp_executesql, la utilizo dentro de un
procedimiento almacenado para ejecutar una query a la que se le pasan
parametros, el problema esta en que si ejecuto el procedimiento desde el
analizador de consultas funciona perfectamente, pero cuando lo hago desde


el
Visual studio devuelve al tabla siempre vacia.
Hay va parte del código.

exec sp_Executesql @Query,
N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
@ID_Region, @ID_Procedimiento
GO

a ver si alguien me puede dar una solución, gracias







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
Respuesta Responder a este mensaje
#2 José Cordero
02/06/2004 - 17:03 | Informe spam
Hola Maxi,
uso sqldinamico para no tener que hacer 8 procedimientos practicamente
iguales, ahí va el código completo, gracias.

CREATE PROCEDURE [dbo].[FindGruposExploracion]
(@ID_Seccion int,
@ID_Region int,
@ID_Procedimiento int,
@NTabla varchar (200)
)
AS

set nocount off

DECLARE @Query NVARCHAR (2000)


set @Query = ' SELECT * FROM ' + @Ntabla + ' INNER JOIN VistaReglaGrupos ON
VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion' +
' WHERE (@ID_Seccion is null or (VistaReglaGrupos.ID_SeccionRadiologica is
null or VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
and (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null or
VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
and (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is
null or VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
VistaReglaGrupos.TipoRegla = ''' + 'Inclusión' + ''' and ' + @NTabla +
'.ID_Agrupacion not in (Select ' + @NTabla+ '.ID_Agrupacion from ' +@NTabla
+ ' INNER JOIN VistaReglaGrupos on
VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion WHERE
(@ID_Seccion is null or
(VistaReglaGrupos.ID_SeccionRadiologica is null or
VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
and
(@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null or
VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
and
(@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is null or
VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
VistaReglaGrupos.TipoRegla = ''' + 'Exclusión' + ''')'


print @Query

execute sp_Executesql @Query,
N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
@ID_Region, @ID_Procedimiento
GO


"Maxi" escribió en el mensaje
news:%
Hola, primero yo me preguntaria poque usas SqlDinamico no? podrias postiar
que hace ese SqlDinamico?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"José Cordero" escribió en el mensaje
news:OV7Fx%
> Hola a todos,
> tengo un problema con la función sp_executesql, la utilizo dentro de un
> procedimiento almacenado para ejecutar una query a la que se le pasan
> parametros, el problema esta en que si ejecuto el procedimiento desde el
> analizador de consultas funciona perfectamente, pero cuando lo hago


desde
el
> Visual studio devuelve al tabla siempre vacia.
> Hay va parte del código.
>
> exec sp_Executesql @Query,
> N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
> @ID_Region, @ID_Procedimiento
> GO
>
> a ver si alguien me puede dar una solución, gracias
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004


Respuesta Responder a este mensaje
#3 Maxi
02/06/2004 - 17:22 | Informe spam
Hola, bueno no comparto tu idea :(, no se deberia tratar de alivianar el
trabajo del desarrollador sino del motor de BDD.
En tu caso es preferible hacer 8 o n procedimientos que hacerlo con
SqlDinamico, este ultimo es super inseguro y lento,lento.

evisate este articulo y luego me comentas :-)

http://www.algonet.se/~sommar/dynamic_sql.html

Bye


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"José Cordero" escribió en el mensaje
news:%
Hola Maxi,
uso sqldinamico para no tener que hacer 8 procedimientos practicamente
iguales, ahí va el código completo, gracias.

CREATE PROCEDURE [dbo].[FindGruposExploracion]
(@ID_Seccion int,
@ID_Region int,
@ID_Procedimiento int,
@NTabla varchar (200)
)
AS

set nocount off

DECLARE @Query NVARCHAR (2000)


set @Query = ' SELECT * FROM ' + @Ntabla + ' INNER JOIN VistaReglaGrupos


ON
VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion' +
' WHERE (@ID_Seccion is null or (VistaReglaGrupos.ID_SeccionRadiologica


is
null or VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
and (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null


or
VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
and (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is
null or VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
VistaReglaGrupos.TipoRegla = ''' + 'Inclusión' + ''' and ' + @NTabla +
'.ID_Agrupacion not in (Select ' + @NTabla+ '.ID_Agrupacion from '


+@NTabla
+ ' INNER JOIN VistaReglaGrupos on
VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion WHERE
(@ID_Seccion is null or
(VistaReglaGrupos.ID_SeccionRadiologica is null or
VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
and
(@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null or
VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
and
(@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is null


or
VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
VistaReglaGrupos.TipoRegla = ''' + 'Exclusión' + ''')'


print @Query

execute sp_Executesql @Query,
N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
@ID_Region, @ID_Procedimiento
GO


"Maxi" escribió en el mensaje
news:%
> Hola, primero yo me preguntaria poque usas SqlDinamico no? podrias


postiar
> que hace ese SqlDinamico?
>
>
> Salu2
> Maxi
> Buenos Aires - Argentina
> Desarrollador Microsoft 3 Estrellas .NET
> Nunca consideres el estudio como una obligación sino como
> una oportunidad para penetrar en el bello y maravillosos
> mundo del saber.
> - Albert Einstein
>
>
>
> "José Cordero" escribió en el mensaje
> news:OV7Fx%
> > Hola a todos,
> > tengo un problema con la función sp_executesql, la utilizo dentro de


un
> > procedimiento almacenado para ejecutar una query a la que se le pasan
> > parametros, el problema esta en que si ejecuto el procedimiento desde


el
> > analizador de consultas funciona perfectamente, pero cuando lo hago
desde
> el
> > Visual studio devuelve al tabla siempre vacia.
> > Hay va parte del código.
> >
> > exec sp_Executesql @Query,
> > N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int',


@ID_Seccion,
> > @ID_Region, @ID_Procedimiento
> > GO
> >
> > a ver si alguien me puede dar una solución, gracias
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
Respuesta Responder a este mensaje
#4 Jose Mariano Alvarez \(MUG\)
02/06/2004 - 19:24 | Informe spam
Sp_ExecuteSQL se usa para tener planes de ejecución en la cache a partir de
secuencias dinámicas, algo asi como Stored procedures dinámicos. No revise
muy en detalle el Stored pero en este caso parece que lo usa para eso.

Sin embargo, no veo el problema que plantea.
Yo distinguiría las variables internas de las externas al SP_ExecuteSQL
cambiándole el nombre a para ver si no hay otra cosa.
Por ejemplo el prefijo @ID lo cambiaria por @P para el codigo de la variable
@query

El exec te quedaria por ejemplo

execute sp_Executesql @Query,
N'@P_Seccion int, @P_Region int, @P_Procedimiento int', @ID_Seccion,
@ID_Region,
@ID_Procedimiento


Estas usando el mismo usuario?
Los permisos estan bien?
Que VS estas usando?


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Maxi" wrote in message
news:
Hola, bueno no comparto tu idea :(, no se deberia tratar de alivianar el
trabajo del desarrollador sino del motor de BDD.
En tu caso es preferible hacer 8 o n procedimientos que hacerlo con
SqlDinamico, este ultimo es super inseguro y lento,lento.

evisate este articulo y luego me comentas :-)

http://www.algonet.se/~sommar/dynamic_sql.html

Bye


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"José Cordero" escribió en el mensaje
news:%
> Hola Maxi,
> uso sqldinamico para no tener que hacer 8 procedimientos practicamente
> iguales, ahí va el código completo, gracias.
>
> CREATE PROCEDURE [dbo].[FindGruposExploracion]
> (@ID_Seccion int,
> @ID_Region int,
> @ID_Procedimiento int,
> @NTabla varchar (200)
> )
> AS
>
> set nocount off
>
> DECLARE @Query NVARCHAR (2000)
>
>
> set @Query = ' SELECT * FROM ' + @Ntabla + ' INNER JOIN VistaReglaGrupos
ON
> VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion' +
> ' WHERE (@ID_Seccion is null or (VistaReglaGrupos.ID_SeccionRadiologica
is
> null or VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
> and (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null
or
> VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
> and (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is
> null or VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
> VistaReglaGrupos.TipoRegla = ''' + 'Inclusión' + ''' and ' + @NTabla


+
> '.ID_Agrupacion not in (Select ' + @NTabla+ '.ID_Agrupacion from '
+@NTabla
> + ' INNER JOIN VistaReglaGrupos on
> VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion WHERE
> (@ID_Seccion is null or
> (VistaReglaGrupos.ID_SeccionRadiologica is null or
> VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
> and
> (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null or
> VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
> and
> (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is null
or
> VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
> VistaReglaGrupos.TipoRegla = ''' + 'Exclusión' + ''')'
>
>
> print @Query
>
> execute sp_Executesql @Query,
> N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int', @ID_Seccion,
> @ID_Region, @ID_Procedimiento
> GO
>
>
> "Maxi" escribió en el mensaje
> news:%
> > Hola, primero yo me preguntaria poque usas SqlDinamico no? podrias
postiar
> > que hace ese SqlDinamico?
> >
> >
> > Salu2
> > Maxi
> > Buenos Aires - Argentina
> > Desarrollador Microsoft 3 Estrellas .NET
> > Nunca consideres el estudio como una obligación sino como
> > una oportunidad para penetrar en el bello y maravillosos
> > mundo del saber.
> > - Albert Einstein
> >
> >
> >
> > "José Cordero" escribió en el mensaje
> > news:OV7Fx%
> > > Hola a todos,
> > > tengo un problema con la función sp_executesql, la utilizo dentro de
un
> > > procedimiento almacenado para ejecutar una query a la que se le


pasan
> > > parametros, el problema esta en que si ejecuto el procedimiento


desde
el
> > > analizador de consultas funciona perfectamente, pero cuando lo hago
> desde
> > el
> > > Visual studio devuelve al tabla siempre vacia.
> > > Hay va parte del código.
> > >
> > > exec sp_Executesql @Query,
> > > N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int',
@ID_Seccion,
> > > @ID_Region, @ID_Procedimiento
> > > GO
> > >
> > > a ver si alguien me puede dar una solución, gracias
> > >
> > >
> >
> >
> >
> > Outgoing mail is certified Virus Free.
> > Checked by AVG anti-virus system (http://www.grisoft.com).
> > Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
> >
> >
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004







Revisado por AVG

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.693 / Virus Database: 454 - Release Date: 31/05/2004
Respuesta Responder a este mensaje
#5 José Cordero
03/06/2004 - 09:00 | Informe spam
Hola, gracias a todos por responder. Cambie el nombre de las variables pero
nada sigue igual. El usuario es el mismo y los permisos estan correctos, la
única diferencia es que lo ejecuto desde el VS o el anlizador de consultas.
Mi VS es el 2003 y el framework el 1.1.
Aunque creo que Maxi tiene razon y hare 8 stores, la razon por la que la
hacia en uno aparte de trabajar menos :-) es que no me gusta tener tantos
procedimientos almacenados en la BD. De todas maneras el error me intriga, a
ver si alguien me puede dar una explicación.
Saludos

"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió
en el mensaje news:
Sp_ExecuteSQL se usa para tener planes de ejecución en la cache a partir


de
secuencias dinámicas, algo asi como Stored procedures dinámicos. No revise
muy en detalle el Stored pero en este caso parece que lo usa para eso.

Sin embargo, no veo el problema que plantea.
Yo distinguiría las variables internas de las externas al SP_ExecuteSQL
cambiándole el nombre a para ver si no hay otra cosa.
Por ejemplo el prefijo @ID lo cambiaria por @P para el codigo de la


variable
@query

El exec te quedaria por ejemplo

execute sp_Executesql @Query,
N'@P_Seccion int, @P_Region int, @P_Procedimiento int', @ID_Seccion,
@ID_Region,
@ID_Procedimiento


Estas usando el mismo usuario?
Los permisos estan bien?
Que VS estas usando?


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Maxi" wrote in message
news:
> Hola, bueno no comparto tu idea :(, no se deberia tratar de alivianar el
> trabajo del desarrollador sino del motor de BDD.
> En tu caso es preferible hacer 8 o n procedimientos que hacerlo con
> SqlDinamico, este ultimo es super inseguro y lento,lento.
>
> evisate este articulo y luego me comentas :-)
>
> http://www.algonet.se/~sommar/dynamic_sql.html
>
> Bye
>
>
> Salu2
> Maxi
> Buenos Aires - Argentina
> Desarrollador Microsoft 3 Estrellas .NET
> Nunca consideres el estudio como una obligación sino como
> una oportunidad para penetrar en el bello y maravillosos
> mundo del saber.
> - Albert Einstein
>
>
>
> "José Cordero" escribió en el mensaje
> news:%
> > Hola Maxi,
> > uso sqldinamico para no tener que hacer 8 procedimientos practicamente
> > iguales, ahí va el código completo, gracias.
> >
> > CREATE PROCEDURE [dbo].[FindGruposExploracion]
> > (@ID_Seccion int,
> > @ID_Region int,
> > @ID_Procedimiento int,
> > @NTabla varchar (200)
> > )
> > AS
> >
> > set nocount off
> >
> > DECLARE @Query NVARCHAR (2000)
> >
> >
> > set @Query = ' SELECT * FROM ' + @Ntabla + ' INNER JOIN


VistaReglaGrupos
> ON
> > VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion' +
> > ' WHERE (@ID_Seccion is null or


(VistaReglaGrupos.ID_SeccionRadiologica
> is
> > null or VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
> > and (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is


null
> or
> > VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
> > and (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento


is
> > null or VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
> > VistaReglaGrupos.TipoRegla = ''' + 'Inclusión' + ''' and ' +


@NTabla
+
> > '.ID_Agrupacion not in (Select ' + @NTabla+ '.ID_Agrupacion from '
> +@NTabla
> > + ' INNER JOIN VistaReglaGrupos on
> > VistaReglaGrupos.ID_Agrupacion = ' + @NTabla + '.ID_Agrupacion WHERE
> > (@ID_Seccion is null or
> > (VistaReglaGrupos.ID_SeccionRadiologica is null or
> > VistaReglaGrupos.ID_SeccionRadiologica = @ID_Seccion))
> > and
> > (@ID_Region is null or (VistaReglaGrupos.ID_RegionAnatomica is null


or
> > VistaReglaGrupos.ID_RegionAnatomica = @ID_Region))
> > and
> > (@ID_Procedimiento is null or (VistaReglaGrupos.ID_Procedimiento is


null
> or
> > VistaReglaGrupos.ID_Procedimiento = @ID_Procedimiento)) and
> > VistaReglaGrupos.TipoRegla = ''' + 'Exclusión' + ''')'
> >
> >
> > print @Query
> >
> > execute sp_Executesql @Query,
> > N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int',


@ID_Seccion,
> > @ID_Region, @ID_Procedimiento
> > GO
> >
> >
> > "Maxi" escribió en el mensaje
> > news:%
> > > Hola, primero yo me preguntaria poque usas SqlDinamico no? podrias
> postiar
> > > que hace ese SqlDinamico?
> > >
> > >
> > > Salu2
> > > Maxi
> > > Buenos Aires - Argentina
> > > Desarrollador Microsoft 3 Estrellas .NET
> > > Nunca consideres el estudio como una obligación sino como
> > > una oportunidad para penetrar en el bello y maravillosos
> > > mundo del saber.
> > > - Albert Einstein
> > >
> > >
> > >
> > > "José Cordero" escribió en el mensaje
> > > news:OV7Fx%
> > > > Hola a todos,
> > > > tengo un problema con la función sp_executesql, la utilizo dentro


de
> un
> > > > procedimiento almacenado para ejecutar una query a la que se le
pasan
> > > > parametros, el problema esta en que si ejecuto el procedimiento
desde
> el
> > > > analizador de consultas funciona perfectamente, pero cuando lo


hago
> > desde
> > > el
> > > > Visual studio devuelve al tabla siempre vacia.
> > > > Hay va parte del código.
> > > >
> > > > exec sp_Executesql @Query,
> > > > N'@ID_Seccion int, @ID_Region int, @ID_Procedimiento int',
> @ID_Seccion,
> > > > @ID_Region, @ID_Procedimiento
> > > > GO
> > > >
> > > > a ver si alguien me puede dar una solución, gracias
> > > >
> > > >
> > >
> > >
> > >
> > > Outgoing mail is certified Virus Free.
> > > Checked by AVG anti-virus system (http://www.grisoft.com).
> > > Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
> > >
> > >
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004
>
>



Revisado por AVG

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.693 / Virus Database: 454 - Release Date: 31/05/2004


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