Gracias por la respuesta Mariano. 
Te comento algunas particularidades para saber tu opinión y saber si se
justifica o conviene cambiar algo:
- Actualmnete uso
  EXEC( 'SELECT .... FROM Afiliados  WHERE (nEstado = ' + @nEstado + ' ) AND
tNroCaja IN ( ' + @tDetallado + ' )  GROUP BY tTipoLegajo , nNroLegajo,
tNroCaja)
- la lista de valores del párámetro dentro del IN como mínimo serán 100.
- la base de datos es bastante grande y el servidor muy modesto...
- el campo que va dentro del IN es un char de 5 y no esta indexado.
- La idea final es usarlo dentro de otro sp transaccional que tendrá como
función HACER UN DELETE, UN INSERT y UPDATE con el mismo tipo de WHERE.
Actualmente este paso se realiza mediante un bucle desde el cliente pero es
muy costoso.
 
Gracias.
 

 
  _____  

De: Jose Mariano Alvarez [mailto:[EMAIL PROTECTED] 
Enviado el: martes, 16 de octubre de 2007 7:24
Para: [EMAIL PROTECTED]
Asunto: [dbms] Re: RE: [dbms] RE: [dbms] Sql dinámico en sp


No creo que te funcione.
Creo que habria que complicarlo demasiado para aceptar conjuntos de valores.
En ese caso usaria probablemente XML pero creo que a la larga el costo en
CPU es parecido.
 
Olvidate del costo de la recompilacion porque ese query es trivial.
 
Saludos

-- 
-------------------------------- 
Atte.
Ing. Jose Mariano Alvarez
SQL Total Consulting 
 
 
 
 


 
On 10/15/07, Alejandro A. ALEKSICH <[EMAIL PROTECTED]> wrote: 

La idea es parametrizarlo. Mejor dicho, y veremos si estoy en lo
correcto....... Parametrizado permitrirá almacenar el plan en el cahé para 
un ejecución más rápida en las proximas llamadas.

-----Mensaje original-----
De: Diego Jancic [mailto:[EMAIL PROTECTED]
Enviado el: lunes, 15 de octubre de 2007 14:52 
Para: [EMAIL PROTECTED]
Asunto: [dbms] RE: [dbms] Sql dinámico en sp

Hola,
No podes parametrizar lo que esta dentro del IN...
Tenes que concatenar, algo asi: 

'select ..... where xyz IN (' + @valores_separados_por_coma + ')'

Saludos!,
Diego

-----Original Message-----
From: [email protected] [mailto: [email protected] <mailto:[email protected]> ] On
Behalf Of Alejandro A.
ALEKSICH
Sent: Lunes, 15 de Octubre de 2007 02:10 p.m.
To: Diego Jancic
Subject: [dbms] Sql dinámico en sp

Disculpen lo tonta de la pregunta pero no veo el error...... 

Tengo la siguiente sentencia que recupera registros de la base de datos:
SELECT tTipoLegajo, nNroLegajo AS Legajo, tNroCaja AS Caja FROM Afiliados
WHERE tNroCaja IN ('d3090' ,' d3089' ) GROUP BY tTipoLegajo , nNroLegajo, 
tNroCaja ORDER BY tNroCaja, nNroLegajo

Ahora quiero hacer un sp que lo haga mediante sql dinámico, para lo cual
ejecuto ésto en al Analizador de Consultas
Pero no recupera nada...
declare @tDetallado2 varchar(4000) 
declare @sql Nvarchar(4000)
DECLARE @tDefinicion AS NVARCHAR(4000)

               SET @tDetallado2 = 'd3090,d3089'
               SET @tDetallado2 = quotename(@tDetallado2, '''')
               SET @tDetallado2 =  REPLACE (@tDetallado2, ',' , ''', ''')
               SET @tDefinicion = N'@tDetalle Varchar(4000)'
               SET @sql = N'SELECT     tTipoLegajo, nNroLegajo AS Legajo, 
tNroCaja AS Caja FROM Afiliados
               WHERE tNroCaja IN (@tDetalle)   GROUP BY tTipoLegajo ,
nNroLegajo, tNroCaja ORDER BY tNroCaja, nNroLegajo'

               exec sp_executesql  @sql , @tDefinicion, 
@[EMAIL PROTECTED]


Si funciona:
               SET @tDetallado2 = 'd3090'
               SET @tDefinicion = N'@tDetalle Varchar(4000)'
               SET @sql = N'SELECT     tTipoLegajo, nNroLegajo AS Legajo, 
tNroCaja AS Caja FROM Afiliados
               WHERE tNroCaja IN (@tDetalle)   GROUP BY tTipoLegajo ,
nNroLegajo, tNroCaja ORDER BY tNroCaja, nNroLegajo'

               exec sp_executesql  @sql , @tDefinicion, 
@[EMAIL PROTECTED]

¿qué esta mal?
Gracias.-





__________ NOD32 2591 (20071014) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com







Responder a