Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con variables en SQL dinámico

Estas en el tema de Problema con variables en SQL dinámico en el foro de SQL Server en Foros del Web. Hola a todos! Estoy armando una consulta dinámica en SQL para recibir diversas variables, según filtros elegidos por los usuarios, pero el problema que tengo ...
  #1 (permalink)  
Antiguo 31/05/2008, 21:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Problema con variables en SQL dinámico

Hola a todos!

Estoy armando una consulta dinámica en SQL para recibir diversas variables, según filtros elegidos por los usuarios, pero el problema que tengo es al momento de poner la variable dentro de la sentencia del SELECT.

Este es mi sp:

create procedure sp_reporte_prueba
@fechainicial datetime,
@fechafinal datetime
AS
declare @sqlstring as nvarchar(4000)

SET @SQLString = N' SELECT id_historico, tienda.nombre AS Cadena, Sucursal, Fecha, status.descripción AS '+char(39)+'Descripción de estatus'+char(39)+', Monto, Descripcion, tienda.analistaresponsable AS Responsable
FROM tienda INNER JOIN matrizhistorico ON tienda.id_tienda = matrizhistorico.sucursal INNER JOIN status ON matrizhistorico.id_estatus = status.id_status'

SET @SQLString = @SQLString + N' WHERE matrizhistorico.fecha BETWEEN @fechainicial AND @fechafinal ORDER BY Sucursal, Fecha, status.descripción DESC'
PRINT @SQLString
EXECUTE sp_executesql @SQLString

Ahora bien lo ejecuto de la siguiente manera:

exec sp_reporte_prueba '2008-01-01', '2008-06-06'

Lo que me retorna el siguiente error:

Server: Msg 137, Level 15, State 2, Line 2
Must declare the variable '@fechainicial'.

Intente poniendo ' + @Fechainicial + ' pero me marca el error: Error converting datetime from string, palabras más palabras menos...

De antemano les agradezco cualquier ayuda, muchas gracias por su tiempo!!
  #2 (permalink)  
Antiguo 02/06/2008, 09:03
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema con variables en SQL dinámico

Tienes que pasarle por parametros el valor de la variable...

consulta la ayuda del sp sp_executesql..

Oye pero ahi no se ve algo que justifique el uso de sql dinamico... puedes ejecutarlo directamente...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 02/06/2008, 11:16
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Respuesta: Problema con variables en SQL dinámico

Saludos Andres95 agradezco mucho tu comentario...

En ese caso que mostre no se requiere el SQL dinámico, sin embargo no solamente utilizo las variable de fecha inicial y fecha final sino otras más que si requieren de consultas dinámicas.

Bueno y respecto al problema en general logre resolverlo de la siguiente forma, espero que a alguien le sea de utilidad:

En vez de utilizar WHERE matrizhistorico.fecha BETWEEN @fechainicial AND @fechafinal puse:

WHERE YEAR(Matrizhistorico.fecha) BETWEEN ' + CAST(YEAR(@Fechainicial) AS varchar) + ' AND ' + CAST(YEAR(@Fechafinal) AS varchar) + ' AND MONTH(Matrizhistorico.fecha) BETWEEN ' + CAST(MONTH(@fechainicial) AS varchar) + ' AND ' + CAST(MONTH(@Fechafinal) AS varchar) + ' AND DAY(Matrizhistorico.fecha) BETWEEN ' + CAST(DAY(@Fechainicial) AS varchar) + ' AND ' + CAST(DAY(@Fechafinal) AS varchar)

De esta manera funcionó a la perfección.
  #4 (permalink)  
Antiguo 02/06/2008, 13:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problema con variables en SQL dinámico

Silm

Deberia revisar el tiempo que se tarda su consulta y sobre todo las LECTURAS que hace hacia su base de datos con SET STATISTICS IO ON

No creo que sea muy eficiente.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:17.