insertar fechas sin cursores

17/01/2006 - 13:14 por **joselitux** | Informe spam
Hola

Estab interesado en rellenar una tabla con esta estructura FECHA,VALOR
de modo que cada fecha sea autoincremental con respecto al registro
anterior en un día. El campo valor siempres es igual (1). Se trata de
inicializar una tabla para hacer updates.

uso esta sentencia, pero no funciona:

INSERT INTO TABLA (FECHA,VALOR) VALUES (FECHA+1,'1')



gracias desde ya

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
17/01/2006 - 13:43 | Informe spam
Puedes hacer una función de usuario que te devuelva ese valor, aunque el
mayor problema lo tendrás en gestionar la concurrencia, es decir, en evitar
duplicados de ese valor.

Una opción es usar los procedimientos sp_getapplock y sp_releaseapplock,
o bien realizarlo en un procedimiento almacenado dentro de una transacción
con un nivel de aislamiento adecuado


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"**joselitux**" escribió en el mensaje
news:
Hola

Estab interesado en rellenar una tabla con esta estructura FECHA,VALOR
de modo que cada fecha sea autoincremental con respecto al registro
anterior en un día. El campo valor siempres es igual (1). Se trata de
inicializar una tabla para hacer updates.

uso esta sentencia, pero no funciona:

INSERT INTO TABLA (FECHA,VALOR) VALUES (FECHA+1,'1')



gracias desde ya
Respuesta Responder a este mensaje
#2 Salvador Ramos
17/01/2006 - 13:56 | Informe spam
Hola,

Si es una cosa puntual, que vas a ejecutar solamente tu, puedes optar por
utilizar un bucle while que vaya aumentando la fecha de 1 en 1 e insertando
la fila.

Ahora si es un proceso que pueden ejecutar varios usuarios, y demás habrá
que ver temas de concurrencia, posibilidades de duplicidades, errores,
etc...

Sería interesante que nos detallases más sobre el uso, y sobre todo si es
para un proceso puntual que ejecutará un solo usuario.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"**joselitux**" escribió en el mensaje
news:
Hola

Estab interesado en rellenar una tabla con esta estructura FECHA,VALOR de
modo que cada fecha sea autoincremental con respecto al registro anterior
en un día. El campo valor siempres es igual (1). Se trata de inicializar
una tabla para hacer updates.

uso esta sentencia, pero no funciona:

INSERT INTO TABLA (FECHA,VALOR) VALUES (FECHA+1,'1')



gracias desde ya
Respuesta Responder a este mensaje
#3 **joselitux**
17/01/2006 - 14:02 | Informe spam
Sólo lo voy a hacer yo de manera puntual para inicializar una tabla que
no debe de estar vacía. Los usuarios solo van a hacer updates mediante
una aplicación. Pero de momento me parece muy engorroso rellenarla a mano.


Salvador Ramos wrote:
Hola,

Si es una cosa puntual, que vas a ejecutar solamente tu, puedes optar por
utilizar un bucle while que vaya aumentando la fecha de 1 en 1 e insertando
la fila.

Ahora si es un proceso que pueden ejecutar varios usuarios, y demás habrá
que ver temas de concurrencia, posibilidades de duplicidades, errores,
etc...

Sería interesante que nos detallases más sobre el uso, y sobre todo si es
para un proceso puntual que ejecutará un solo usuario.

Respuesta Responder a este mensaje
#4 Jose Mariano Alvarez
17/01/2006 - 14:36 | Informe spam
Puedes usar un ciclo WHILE y la función DATEADD para ir incrementando de a 1,

@fecha='20060101'
While @fecha <= '20061231'
BEGIN
INSERT .
@fechaÚTEADD(dd,1,,@fecha)
END

Sugiero que uses funciones si precisas determinar atributos en cada día así
el código queda mas simple.

Ing. Jose Mariano Alvarez

J0sé P-u-n-t-0 Marian0 P-u-n-t-0 Álvarez ** gma1l P-u-n-t-0 c0n <-- M
(Saca guiones, blancos, acentos, ceros por o)

http://www.sqlgurus.org


"**joselitux**" wrote:

Sólo lo voy a hacer yo de manera puntual para inicializar una tabla que
no debe de estar vacía. Los usuarios solo van a hacer updates mediante
una aplicación. Pero de momento me parece muy engorroso rellenarla a mano.


Salvador Ramos wrote:
> Hola,
>
> Si es una cosa puntual, que vas a ejecutar solamente tu, puedes optar por
> utilizar un bucle while que vaya aumentando la fecha de 1 en 1 e insertando
> la fila.
>
> Ahora si es un proceso que pueden ejecutar varios usuarios, y demás habrá
> que ver temas de concurrencia, posibilidades de duplicidades, errores,
> etc...
>
> Sería interesante que nos detallases más sobre el uso, y sobre todo si es
> para un proceso puntual que ejecutará un solo usuario.
>

Respuesta Responder a este mensaje
#5 Alejandro Mesa
17/01/2006 - 16:46 | Informe spam
joselitux,

Tambien te puedes armar una tabla de numeros, cosa que es simple de hacer y
no penaliza de manera alguna tu db. Luego usas una fecha inicial y en
conjunto con esta tabla de numeros, inicializas tu tabla.

Ejemplo:

use northwind
go

create table t1(c1 datetime, c2 int default (1))
go

select
identity(int, 0, 1) as numero
into
dbo.numero
from
master.dbo.sysmessages as a
cross join
(select top 10 1 as c1 from master.dbo.systypes) as b
go

create unique clustered index ix_u_c_numero_numro on numero(numero asc)
go


declare @fecha_inicio datetime

set @fecha_inicio = '19600101'

insert into t1(c1)
select dateadd(day, numero, @fecha_inicio)
from dbo.numero
where numero between 0 and 10000
go

select * from t1
go

drop table t1, numero
go

En mi laptop (Pentium III 1.13 mhz - 1gb ram - windows 2000 pro), este
proceso toma 1 segundo.


AMB


"**joselitux**" wrote:

Sólo lo voy a hacer yo de manera puntual para inicializar una tabla que
no debe de estar vacía. Los usuarios solo van a hacer updates mediante
una aplicación. Pero de momento me parece muy engorroso rellenarla a mano.


Salvador Ramos wrote:
> Hola,
>
> Si es una cosa puntual, que vas a ejecutar solamente tu, puedes optar por
> utilizar un bucle while que vaya aumentando la fecha de 1 en 1 e insertando
> la fila.
>
> Ahora si es un proceso que pueden ejecutar varios usuarios, y demás habrá
> que ver temas de concurrencia, posibilidades de duplicidades, errores,
> etc...
>
> Sería interesante que nos detallases más sobre el uso, y sobre todo si es
> para un proceso puntual que ejecutará un solo usuario.
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida