Diego, eso que propones es irracional, porque no se puede actualizar
un dato sin previamente encontrarlo y para encontrarlo hay que
compararlo.
Me parece que lo que quieres deberia resolverse de otra manera
analizando los requerimientos mas macro y eligiendo otra alternativa.
Por ejemplo te sugiero analizar un trigger de delete como alternativa
de proceso para "mover" los registros de tabla en tabla.
Eso es algo que siempre explico en los cursos de tuning ya que te da
eficiencia y transaccionalidad ademas de que pone un marco para hacer
el proceso reenganchable
--------------------------------
Atte.
Ing. Jose Mariano Alvarez
SQL Total Consulting
2008/11/4 Diego Jancic <[EMAIL PROTECTED]>:
> Hola Esteban,
> El volumen de datos es minimo (~ 10) porque es un proceso que se hace por
> partes, pero igual lo que no queria era comparar por C1, porque en realidad
> puede que haya duplicados y no sea exactamente la respuesta que espero...
>
> Igual voy a hacer eso (a menos que algun mago tenga otra solucion :o)
>
> Gracias!,
> Diego
>
> 2008/11/4 Esteban Grinberg <[EMAIL PROTECTED]>
>>
>> No se si existe mejor forma, pero esta funciona. Depende de tu volumen de
>> datos evaluar si es optima o no.
>>
>> begin tran
>>
>> create table notmp (id int primary key identity(1,1),
>> c1 nvarchar(5))
>> create table #tmp (c1 nvarchar(5),
>> fk int)
>>
>> insert into #tmp (c1) values ('A')
>> insert into #tmp (c1) values ('B')
>> insert into #tmp (c1) values ('C')
>>
>> INSERT INTO notmp (c1)
>> select c1
>> from #tmp
>>
>> UPDATE #tmp SET FK = ID FROM notmp WHERE notmp.C1 = #tmp.C1
>>
>> select * from notmp
>> select * from #tmp
>>
>>
>> drop table #tmp
>> drop table notmp
>>
>> rollback tran
>>
>>
>> 2008/11/4 Diego Jancic <[EMAIL PROTECTED]>
>>>
>>> Hola gente!,
>>> Tengo un problema que no se me ocurre como resolver sin usar columnas
>>> auxiliares (en las tablas no temporales)
>>>
>>> Mi idea es, si tengo una tabla con este contenido:
>>>
>>> Tabla: #tmp
>>> c1 fk
>>> ----- -----------
>>> A NULL
>>> B NULL
>>> C NULL
>>>
>>> Insertar todo ese contenido en otra tabla no temporal, y actualizar la
>>> tabla temporal con los ids insertados. De forma que quede:
>>>
>>> Tabla: notmp
>>> id c1
>>> -------- -----
>>> 1 A
>>> 2 B
>>> 3 C
>>>
>>> Tabla: #tmp
>>> c1 fk
>>> ----- -----------
>>> A 1
>>> B 2
>>> C 3
>>>
>>> Se entiende??
>>>
>>> Yo llegue a hacer algo como esto:
>>>
>>> --------------------------------------------------------
>>> begin tran
>>>
>>> create table notmp (id int primary key identity(1,1),
>>> c1 nvarchar(5))
>>> create table #tmp (c1 nvarchar(5),
>>> fk int)
>>>
>>> insert into #tmp (c1) values ('A')
>>> insert into #tmp (c1) values ('B')
>>> insert into #tmp (c1) values ('C')
>>>
>>> INSERT INTO notmp (c1)
>>> OUTPUT INSERTED.ID INTO #tmp (fk)
>>> select c1
>>> from #tmp
>>>
>>> select * from notmp
>>> select * from #tmp
>>>
>>>
>>> drop table #tmp
>>> drop table notmp
>>>
>>> rollback tran
>>> --------------------------------------------------------
>>>
>>> Pero eso hace que que me #tmp me quede asi:
>>>
>>> c1 fk
>>> ----- -----------
>>> A NULL
>>> B NULL
>>> C NULL
>>> NULL 1
>>> NULL 2
>>> NULL 3
>>>
>>> Alguna Idea?
>>>
>>> Gracias!,
>>> Diego
>>
>
>