Autor Tema: SQL consulta  (Leído 6781 veces)

Desconectado Tandersan

  • Experto
  • *****
  • Mensajes: 10032
Re:SQL consulta
« Respuesta #40 en: Noviembre 09, 2012, 10:20:19 am »
este procedimiento va a bajar un archivo plano para llenar una Interfaz que se manda a producción para devolver otro archivo plano para actualizar unas tablas y estas procesarlas con info actualizada,

la concatenación era asi +( ; ), +( ; ), etc etc etc

Estimado, si desea agregar un punto y coma al final de cada línea, claro que es:

TEXTO + ;

Si es más de un campo en una consulta SELECT, es:

TEXTO + ; ,
TEXTO + ;

Si colocas

TEXTO + ; + TEXTO + ;

concatenas todo en una sola línea, lo que no es viable por cuanto tu tabla de destino tiene más de una columna. Las inserciones siempre son:

INSERT INTO TABLA_DESTINO (VALOR1, VALOR)
SELECT CAMPO1, CAMPO2 FROM TABLA_ORIGEN

Esto genera error:

INSERT INTO TABLA_DESTINO (VALOR1, VALOR)
SELECT CAMPO1 + CAMPO2 FROM TABLA_ORIGEN

Ahora, si tienes un texto de 4 caracteres, y lo insertas en un campo de largo 4, todo bien.
Si el texto tiene 4 caracteres y le concatenas un punto y coma, entonces el largo del campo debe ser cinco

CREATE TABLE1 ( CAMPO1 VARCHAR(4) )
-> SE PUEDE INSERTAR 'HOLA', 'CHAO'

Si quieres insertar 'HOLA+', 'CHAO+', entonces tabla debe ser
CREATE TABLE1 ( CAMPO1 VARCHAR(5) )
Structure. Logic. Function. Control.
A structure cannot stand without a foundation.
Logic is the foundation of function.
Function is the essence of control.
I am in control.

Desconectado negroVeloz

  • Experto
  • *****
  • Mensajes: 2900
  • CSM, Biónico, Alemán, Entendido y Facho de cuneta
Re:SQL consulta
« Respuesta #41 en: Noviembre 09, 2012, 10:24:05 am »
Entonces, debería ser mas o menos como te indico en el spoiler, pero no se si contendrá otros errores, ya que no tengo las tablas como para probar.

[spoiler]INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)) + ';',
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))                                       + ';',
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))                                  + ';', 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]

Desconectado Tandersan

  • Experto
  • *****
  • Mensajes: 10032
Re:SQL consulta
« Respuesta #42 en: Noviembre 09, 2012, 10:24:13 am »
Otra cosa, entiendo que estás formateando un número 123 para que quede como 0000123, de acuerdo a cierta cantidad de posiciones definidas como iniciales. Por ejemplo en el RUT definiste 18 posiciones, por ende:

1234567 se transforma en 000000000001234567

Creo recordar (solo creo) que SQL Server tiene la función RIGHT.

Si es así, puedes usarla como algo parecido a RIGHT('0000000000000000000000000000' + CAMPO, 18). Es más sencillo que STUFF en términos de codificación, si el resultado deseado es solo completar con ceros hacia la izquierda.
Structure. Logic. Function. Control.
A structure cannot stand without a foundation.
Logic is the foundation of function.
Function is the essence of control.
I am in control.

Desconectado Mithrandir

  • Avanzado
  • ****
  • Mensajes: 1666
Re:SQL consulta
« Respuesta #43 en: Noviembre 09, 2012, 10:26:46 am »
Otra cosa, entiendo que estás formateando un número 123 para que quede como 0000123, de acuerdo a cierta cantidad de posiciones definidas como iniciales. Por ejemplo en el RUT definiste 18 posiciones, por ende:

1234567 se transforma en 000000000001234567

Creo recordar (solo creo) que SQL Server tiene la función RIGHT.

Si es así, puedes usarla como algo parecido a RIGHT('0000000000000000000000000000' + CAMPO, 18). Es más sencillo que STUFF en términos de codificación, si el resultado deseado es solo completar con ceros hacia la izquierda.

si correcto pero en el banco las funciones left o right esta un poco limitada en el banco
mmmmmmmmmmm, a seguir como mono porfiado

Desconectado negroVeloz

  • Experto
  • *****
  • Mensajes: 2900
  • CSM, Biónico, Alemán, Entendido y Facho de cuneta
Re:SQL consulta
« Respuesta #44 en: Noviembre 09, 2012, 13:26:12 pm »
Y pudiste resolverlo?

Desconectado Mithrandir

  • Avanzado
  • ****
  • Mensajes: 1666
Re:SQL consulta
« Respuesta #45 en: Noviembre 09, 2012, 14:08:39 pm »
Y pudiste resolverlo?

si señor, el procedimiento ya esta compilado y en produccion muchas gracias sres., ahora el hilo se transformara en chat. xD
mmmmmmmmmmm, a seguir como mono porfiado

Desconectado negroVeloz

  • Experto
  • *****
  • Mensajes: 2900
  • CSM, Biónico, Alemán, Entendido y Facho de cuneta
Re:SQL consulta
« Respuesta #46 en: Noviembre 09, 2012, 14:19:33 pm »
si señor, el procedimiento ya esta compilado y en produccion muchas gracias sres., ahora el hilo se transformara en chat. xD
A que buena. Y cómo era?
 :thumbsup:

Desconectado Tandersan

  • Experto
  • *****
  • Mensajes: 10032
Re:SQL consulta
« Respuesta #47 en: Noviembre 09, 2012, 14:20:25 pm »
A que buena. Y cómo era?
 :thumbsup:

Como decía yo pues, ¿te queda alguna duda?  :risa2: :risa2: :risa2: :risa2:
¡¡¡Empezó el chateo!!!  :zipynana:
Structure. Logic. Function. Control.
A structure cannot stand without a foundation.
Logic is the foundation of function.
Function is the essence of control.
I am in control.

Desconectado Comufacho

  • Experto
  • *****
  • Mensajes: 11222
Re:SQL consulta
« Respuesta #48 en: Noviembre 09, 2012, 14:20:52 pm »
Le debes una UF a Tandersan, eso en pos de respetar el derecho de propiedad intelectual.  :diablo:

Desconectado Mithrandir

  • Avanzado
  • ****
  • Mensajes: 1666
Re:SQL consulta
« Respuesta #49 en: Noviembre 09, 2012, 14:41:30 pm »
aca esta la solución, a futuro hay que cambiar la fecha pero eso queda para el release 2

[spoiler]IF EXISTS (   SELECT 1 FROM TEMPDB..SYSOBJECTS
      WHERE ID = OBJECT_ID(N'[TEMPDB].[GUEST].[TSFM_SEG_CLI]')
      AND   TYPE = 'U')
BEGIN
   DROP TABLE [TEMPDB].[GUEST].[TSFM_SEG_CLI]
END

select * from TEMPDB.GUEST.TSFM_SEG_CLI
CREATE TABLE TEMPDB.GUEST.TSFM_SEG_CLI (   
RUT VARCHAR(10),
Age_Agente varchar(4),
Suc_sucursal varchar(3),
Saldo_total Varchar(18))

INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE))+ ';',
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))+ ';',
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))+ ';', 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal
[/spoiler]
mmmmmmmmmmm, a seguir como mono porfiado

Tags:
     


    A la memoria de Alex Feliú a.k.a Rommel