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
