PROBLEMA CON ALMACENAMIENTO EN VARIABLE
Publicado por Kevin Alvines (2 intervenciones) el 30/03/2015 02:02:02
Buenas noches..
Tengo un problema, utilizo esta funcion
Donde @DOCUMENT = '1114:111401:1115:1116:111804:'
CREATE FUNCTION [dbo].[RetornarQuery] (@DOCUMENT VARCHAR(4000))
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @RESULTADO INT, @N INT, @A INT
DECLARE @DOCUMENT1 VARCHAR(4000)
DECLARE @M VARCHAR (4000), @R VARCHAR (4000), @H VARCHAR(4000)
SET @A=0
SET @N =0
SET @M=''
SET @R=''
WHILE PATINDEX('%:%',@DOCUMENT)>0
BEGIN
SET @RESULTADO = PATINDEX('%:%',@DOCUMENT) + @N
SELECT @N = @RESULTADO
SELECT @DOCUMENT1 = '' + '''' + LEFT(@DOCUMENT,PATINDEX('%:%',@DOCUMENT)-1) + ''''
SET @M = @M + ' '+CAST((@RESULTADO-@A-1) As Varchar(100))
SET @R = @R + 'LEFT(B.x_CodOrigen,' + CAST((@RESULTADO-@A-1) As Varchar(500)) + ')= ' + @DOCUMENT1 + ' OR '
SET @A = @RESULTADO
SET @RESULTADO = @RESULTADO + ' '+CAST((@RESULTADO) As Varchar(100))
SELECT @DOCUMENT = RIGHT(@DOCUMENT,LEN(@DOCUMENT)-PATINDEX('%:%',@DOCUMENT))
END
SELECT @H=LEFT(@R,LEN(@R)-3)
RETURN @H
END
la cual cuando realizo la ejecucion:
DECLARE @a VARCHAR(8000), @b VARCHAR(8000)
SET @a = dbo.RetornarQuery(LTRIM(RTRIM('1114:111401:1115:1116:111804:')))
SET @b='Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (' + LTRIM(RTRIM(@a)) + ') Where A.C_CodEtl=00202 And A.d_feccierre=@d_feccierre),0)'
SELECT @b
Me devuelve este resultado incompleto:
'Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (LEFT(B.x_CodOrigen,4)= '1114' OR LEFT(B.x_CodOrigen,6)= '111401' OR LEFT(B.x_CodOrigen,4'
Pero ejecutando en sql 2008 el resultado es el siguiente:
'Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (LEFT(B.x_CodOrigen,4)= '1114' OR LEFT(B.x_CodOrigen,6)= '111401' OR LEFT(B.x_CodOrigen,4)= '1115' OR LEFT(B.x_CodOrigen,4)= '1116' OR LEFT(B.x_CodOrigen,6)= '111804')
Where A.C_CodEtl=00202 And A.d_feccierre=@d_feccierre),0)'
Cual puede ser el problema?.. y cual seria la solucion?... gracias...
Tengo un problema, utilizo esta funcion
Donde @DOCUMENT = '1114:111401:1115:1116:111804:'
CREATE FUNCTION [dbo].[RetornarQuery] (@DOCUMENT VARCHAR(4000))
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @RESULTADO INT, @N INT, @A INT
DECLARE @DOCUMENT1 VARCHAR(4000)
DECLARE @M VARCHAR (4000), @R VARCHAR (4000), @H VARCHAR(4000)
SET @A=0
SET @N =0
SET @M=''
SET @R=''
WHILE PATINDEX('%:%',@DOCUMENT)>0
BEGIN
SET @RESULTADO = PATINDEX('%:%',@DOCUMENT) + @N
SELECT @N = @RESULTADO
SELECT @DOCUMENT1 = '' + '''' + LEFT(@DOCUMENT,PATINDEX('%:%',@DOCUMENT)-1) + ''''
SET @M = @M + ' '+CAST((@RESULTADO-@A-1) As Varchar(100))
SET @R = @R + 'LEFT(B.x_CodOrigen,' + CAST((@RESULTADO-@A-1) As Varchar(500)) + ')= ' + @DOCUMENT1 + ' OR '
SET @A = @RESULTADO
SET @RESULTADO = @RESULTADO + ' '+CAST((@RESULTADO) As Varchar(100))
SELECT @DOCUMENT = RIGHT(@DOCUMENT,LEN(@DOCUMENT)-PATINDEX('%:%',@DOCUMENT))
END
SELECT @H=LEFT(@R,LEN(@R)-3)
RETURN @H
END
la cual cuando realizo la ejecucion:
DECLARE @a VARCHAR(8000), @b VARCHAR(8000)
SET @a = dbo.RetornarQuery(LTRIM(RTRIM('1114:111401:1115:1116:111804:')))
SET @b='Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (' + LTRIM(RTRIM(@a)) + ') Where A.C_CodEtl=00202 And A.d_feccierre=@d_feccierre),0)'
SELECT @b
Me devuelve este resultado incompleto:
'Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (LEFT(B.x_CodOrigen,4)= '1114' OR LEFT(B.x_CodOrigen,6)= '111401' OR LEFT(B.x_CodOrigen,4'
Pero ejecutando en sql 2008 el resultado es el siguiente:
'Isnull((SELECT ISNULL(SUM(abs(A.M_impMn)),0) AS MONTO FROM ETL_Detalle A INNER JOIN ETL_Indicadores B ON A.C_CodEtl=B.C_CodEtl And A.C_Indicador=B.C_Indicador And (LEFT(B.x_CodOrigen,4)= '1114' OR LEFT(B.x_CodOrigen,6)= '111401' OR LEFT(B.x_CodOrigen,4)= '1115' OR LEFT(B.x_CodOrigen,4)= '1116' OR LEFT(B.x_CodOrigen,6)= '111804')
Where A.C_CodEtl=00202 And A.d_feccierre=@d_feccierre),0)'
Cual puede ser el problema?.. y cual seria la solucion?... gracias...
Valora esta pregunta


0