SQL - parametros en procedimiento almacenado comillas

 
Vista:

parametros en procedimiento almacenado comillas

Publicado por Fabián (7 intervenciones) el 28/11/2011 21:54:40
Buenas estoy trabajando con SQL server 2008 R2.

Tengo la siguiente duda

tengo un procedimiento almacenado el cual recibe tres parametros y realiza una consulta

Alter PROCEDURE xxx (@filiales varchar(50), @fechaInicio datetime, @fechaFin datetime)

AS
BEGIN

SELECT
CASE
WHEN Compañia='EXCR' THEN 'SCR'
WHEN Compañia='EXES' THEN 'SES'
ELSE Compañia
END AS Compañia,
SUM([Horas No Cobradas]) AS 'TotalHNC',
'TotalHoras'=( SELECT SUM([Horas Cobradas]+[Horas No Cobradas]+[Horas Extra])
FROM dbo.informes_globales info2
WHERE ([Fecha Reporte])between @fechaInicio and @fechaFin
AND info2.Compañia = info.Compañia)
FROM dbo.informes_globales info WHERE ([Fecha Reporte])
between @fechaInicio and @fechaFin
AND Compañia IN (@filiales)
GROUP BY Compañia


END
go


Prueba:
DECLARE @filial varchar(50), @fecha datetime, @fecha2 datetime;
SET @filial = '''excr''' + ','+ '''exes''';
SET @fecha = '2011-10-01';
SET @fecha2 = '2011-12-31';

exec xxx @filial, @fecha, @fecha2;



se supone que la consulta si me devuelve valores cuando la realizo a pie y le pongo los parametros ejemplo:

SELECT
CASE
WHEN Compañia='EXCR' THEN 'SCR'
WHEN Compañia='EXES' THEN 'SES'
ELSE Compañia
END AS Compañia,
SUM([Horas No Cobradas]) AS 'TotalHNC',
'TotalHoras'=( SELECT SUM([Horas Cobradas]+[Horas No Cobradas]+[Horas Extra])
FROM dbo.informes_globales info2
WHERE ([Fecha Reporte])between '2011-10-01' and '2011-12-31'
AND info2.Compañia = info.Compañia)
FROM dbo.informes_globales info WHERE ([Fecha Reporte])
between '2011-10-01' and '2011-12-31'
AND Compañia IN ('excr','exes')
GROUP BY Compañia

si me devuelve los valores. en cambio si ejecuto el procedimiento almacenado no, esto es por el valor @filiales
debe de ser esto ('excr','exes'), le asigno los mismos valores de esta manera @filial = '''excr''' + ','+ '''exes''' y no funciona alguien sabe porque?. supongo q es el manejo con las comillas simples

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

parametros en procedimiento almacenado comillas

Publicado por leonardo_josue (1173 intervenciones) el 29/11/2011 18:01:08
Hola Fabían:

Tal como lo supones, el problema es con el parámetro @filiales, ya que aunque estés manejando comillas y comas en tu parámetro y lo intentes utilizar con el operador IN, el parámetro SE COMPORTA COMO UN SOLO ELEMENTO, es decir, estás haciendo algo como esto:

1
WHERE campo in ('A, B, C')


cuando lo que pretenderías hacer es

1
WHERE campo in ('A', 'B', 'C')



Lo que tienes que hacer es crear SQL Dinámico y ejecutarlo con el procedimiento almacenado sp_executesql, es decir algo como esto:

1
2
3
DECLARE @sql nvarchar(1000)
SET @sql = 'SELECT tus_campos FROM tu_tabla where campo in (' + @filiales + ')'
EXEC sp_executesql @sql



Puedes imprimir la variable @sql para que veas cómo queda formada la consulta que estás tratando de ejecutar y ver si te faltó algo. Dale un vistazo a la ayuda en linea del procedimiento almacenado:

http://msdn.microsoft.com/es-es/library/ms188001(v=SQL.90).aspx

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar