Página 1 de 1

Calcular columna

Publicado: Dom Oct 01, 2006 12:20 pm
por miguel
dada esta tabla en SQL Server
id int NULL,
code varchar(10) NULL,
fecha datetime NULL
id code fecha
-------- ---------- ----------
0 AB123 01/05/1999
0 AB123 02/05/1999
0 AB123 02/05/1999
0 AB123 04/05/1999
0 AA456 05/09/1998
0 AA329 05/09/1998
0 NW234 10/07/2001
Se trata de actualizar la columna ID con los 4 digitos de año mas los 2
de la semana mas un numero ordinal.
Quedarí­a así­
id code fecha
-------- ---------- ----------
1999180001 AB123 01/05/1999
1999180002 AB123 02/05/1999
1999180003 AB123 02/05/1999
1999180004 AB123 01/05/1999
1998360001 AA456 05/09/1998
1998360002 AA329 05/09/1998
2001280001 NW234 10/07/2001
donde : 1999 año, 18 Nº semana 0004 ordinal de la semana
Saludos. Miguel A. Torrellas

Calcular columna

Publicado: Mar Oct 03, 2006 10:09 pm
por jose.luis
Miguel,
Primero deberí­amos ver si existen las tres funciones necesarias para la
transformación que propones. Si no existe, crear dos udf.
Después yo cambiarí­a el tipo Int de Id por un, por ejemplo, bigint
(1999180001 no cabe en un int).
Y después creas un procedimiento almacenado donde abres un cursor con los
datos que quieres modificar y lo recorres aplicando los cambios que
propones.
Tambien puedes crear una instrucción DML más o menos así­ (puede que con los
ceros me haya equivocado en algo).
UPDATE MiTabla SET id = YEAR( fecha ) * 1000000 + WEEK( fecha ) * 10000 +
CONTADOR() WHERE ....
Espero te sirva de guí­a y ayuda.
Saludos,
José Luis Capel
Miguel A. Torrellas wrote:
> dada esta tabla en SQL Server
>
> id int NULL,
> code varchar(10) NULL,
> fecha datetime NULL
>
> id code fecha
> -------- ---------- ----------
> 0 AB123 01/05/1999
> 0 AB123 02/05/1999
> 0 AB123 02/05/1999
> 0 AB123 04/05/1999
> 0 AA456 05/09/1998
> 0 AA329 05/09/1998
> 0 NW234 10/07/2001
>
> Se trata de actualizar la columna ID con los 4 digitos de año mas los 2
> de la semana mas un numero ordinal.
>
> Quedarí­a así­
>
> id code fecha
> -------- ---------- ----------
> 1999180001 AB123 01/05/1999
> 1999180002 AB123 02/05/1999
> 1999180003 AB123 02/05/1999
> 1999180004 AB123 01/05/1999
> 1998360001 AA456 05/09/1998
> 1998360002 AA329 05/09/1998
> 2001280001 NW234 10/07/2001
>
> donde : 1999 año, 18 Nº semana 0004 ordinal de la semana
>
> Saludos. Miguel A. Torrellas

Calcular columna

Publicado: Mar Oct 03, 2006 10:45 pm
por miguel
Gracias por tu respuesta Jose Luis.
De lo que se trata es de crear un desencadenador en SQL Server, de tal
forma que tanto en INSERT com UPDATE actualice la columna
automáticamente partiendo de otra columna de la misma tabla de tipo
datetime. Ye me he mareado bastante con esto debido a que mis
conocimientos en SQL son mas bien escasos, aunque si bien es cierto que
gracias a todos vosotros voy haciendo mis pinitos, de hecho tengo una
aplicación ya casi rodando con casi todas funciones en el servidor y
atacando a este con Xailer , con tus clases de ADO y ODBC, dejándole a
este los SELECT para cargar los MemDateSets, los UPDATES y poco mas.
Necesito ideas para desarrollar este desencadenador.
Gracias de nuevo.
Saludos Miguel A. Torrellas
José Luis Capel escribió:
> Miguel,
>
> Primero deberí­amos ver si existen las tres funciones necesarias para la
> transformación que propones. Si no existe, crear dos udf.
>
> Después yo cambiarí­a el tipo Int de Id por un, por ejemplo, bigint
> (1999180001 no cabe en un int).
>
> Y después creas un procedimiento almacenado donde abres un cursor con los
> datos que quieres modificar y lo recorres aplicando los cambios que
> propones.
>
> Tambien puedes crear una instrucción DML más o menos así­ (puede que con los
> ceros me haya equivocado en algo).
>
> UPDATE MiTabla SET id = YEAR( fecha ) * 1000000 + WEEK( fecha ) * 10000 +
> CONTADOR() WHERE ....
>
> Espero te sirva de guí­a y ayuda.
> Saludos,
> José Luis Capel
>
>
>