Query cannot be updated because the FROM clause is not a single simple table name

23/02/2004 - 09:20 por Celeste | Informe spam
Hola, tengo una base de datos en INFORMIX y quiero mantenerla actualizada
con otra base de datos que tengo en SQL SERVER 2000. Para ello necesito
crear un trabajo que actualice la tabla B (la de informix) con los datos
nuevos que han introducido en la tabla A (SQLServer).

Estoy intentando crear un trabajo, pero no se como decirle que haga un un
select * from A where codigo not in (select * from tabla B).

He probado a vincular el servidor informix y si que ha funcionado , pero lo
que no consigo es hacer un insert, me da este error:

Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error. The provider reported
an unexpected catastrophic failure.
[OLE/DB provider returned message: Query cannot be updated because
the FROM clause is not a single simple table name.]
OLE DB error trace [OLE/DB Provider 'MSDASQL'
IRowsetChange::InsertRow returned 0x8000ffff: The provider reported an
unexpected catastrophic failure.].


Un update si que me deja hacer. ¿que puedo hacer?. Para crear el job ¿como
puedo hacer un select into?

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Miguel Egea
23/02/2004 - 10:22 | Informe spam
Podrías pensar en la duplicaicón con subscriptores heterogeneos así no
tendrías que hacer esas comprobaciones. En cualquier caso el error está (o
parece) en el oledb-provider de informix, prueba a poner otro provider
diferente o a usar odbc.

Saludos
Miguel Egea
"Celeste" escribió en el mensaje
news:uVVAGWe#
Hola, tengo una base de datos en INFORMIX y quiero mantenerla actualizada
con otra base de datos que tengo en SQL SERVER 2000. Para ello necesito
crear un trabajo que actualice la tabla B (la de informix) con los datos
nuevos que han introducido en la tabla A (SQLServer).

Estoy intentando crear un trabajo, pero no se como decirle que haga un un
select * from A where codigo not in (select * from tabla B).

He probado a vincular el servidor informix y si que ha funcionado , pero


lo
que no consigo es hacer un insert, me da este error:

Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error. The provider reported
an unexpected catastrophic failure.
[OLE/DB provider returned message: Query cannot be updated because
the FROM clause is not a single simple table name.]
OLE DB error trace [OLE/DB Provider 'MSDASQL'
IRowsetChange::InsertRow returned 0x8000ffff: The provider reported


an
unexpected catastrophic failure.].


Un update si que me deja hacer. ¿que puedo hacer?. Para crear el job ¿como
puedo hacer un select into?

Muchas gracias.


Respuesta Responder a este mensaje
#2 Celeste
23/02/2004 - 17:15 | Informe spam
Hola Miguel


No creo que sea eso ya que me permite hacer update y select . Lo que no me
permite hacer es hacer un insert. Por lo tanto, supongo que el servidor
vinculado es correcto.

¿que es una duplicación con subscriptores heterogeneos ??



Gracias.
Respuesta Responder a este mensaje
#3 Miguel Egea
23/02/2004 - 17:38 | Informe spam
El proceso de réplica de SQL es capaz de enviar datos a suscriptores que no
sean SQL, es decir enviar comandos conforme se van produciendo en la base de
datos (o guardandolos para enviarlos programadamente a una hora o con una
periodicidad). El mundo de la duplicación es amplísimo, te recomiendo que,
si te interesa, repases la info que hay en los books on line. Aquí estaremos
también encantados de contarte lo que sepamos :-)


Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
"Celeste" escribió en el mensaje
news:#sN7tfi#
Hola Miguel


No creo que sea eso ya que me permite hacer update y select . Lo que no me
permite hacer es hacer un insert. Por lo tanto, supongo que el servidor
vinculado es correcto.

¿que es una duplicación con subscriptores heterogeneos ??



Gracias.


Respuesta Responder a este mensaje
#4 Gustavo Larriera [MVP SQL]
23/02/2004 - 22:03 | Informe spam
Puedes decirnos cuál es la INSERT que usas?

El mensaje de error indica que estás intentando hacer un INSERT donde en el
FROM tienes más de una tabla, tal vez estás intentando un INSERT sobre un
join de tablas?

Verifica si es eso lo que está sucediendo.

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.


"Celeste" wrote in message
news:uVVAGWe%
Hola, tengo una base de datos en INFORMIX y quiero mantenerla actualizada
con otra base de datos que tengo en SQL SERVER 2000. Para ello necesito
crear un trabajo que actualice la tabla B (la de informix) con los datos
nuevos que han introducido en la tabla A (SQLServer).

Estoy intentando crear un trabajo, pero no se como decirle que haga un un
select * from A where codigo not in (select * from tabla B).

He probado a vincular el servidor informix y si que ha funcionado , pero


lo
que no consigo es hacer un insert, me da este error:

Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error. The provider reported
an unexpected catastrophic failure.
[OLE/DB provider returned message: Query cannot be updated because
the FROM clause is not a single simple table name.]
OLE DB error trace [OLE/DB Provider 'MSDASQL'
IRowsetChange::InsertRow returned 0x8000ffff: The provider reported


an
unexpected catastrophic failure.].


Un update si que me deja hacer. ¿que puedo hacer?. Para crear el job ¿como
puedo hacer un select into?

Muchas gracias.


Respuesta Responder a este mensaje
#5 Celeste
24/02/2004 - 08:53 | Informe spam
Gracias pero al final ya lo he solucionado escribiendo esto en una tarea de
ejecucion de SQL:

declare @v_cod_proveedor int
declare @v_nombre_proveedor varchar(30)


declare @cursor1 cursor
set @cursor1 = CURSOR FOR
Select cod_proveedor, nombre_proveedor
from proveedor
where nombre_proveedor is not null
and cod_proveedor not in (select emp_id
from [SERVIDORVINCULADO].BdVinculada.Propietario.EMPRESAS)

open @cursor1
FETCH NEXT FROM @cursor1
INTO @v_cod_proveedor , @v_nombre_proveedor,
WHILE @@FETCH_STATUS=0
begin

insert openquery(SERVIDORVINCULADO, 'select EMP_ID, EMP_DES from EMPRESAS
where 1=0')
values (@v_cod_proveedor ,@v_nombre_proveedor )


FETCH NEXT FROM @cursor1
INTO @v_cod_proveedor , @v_nombre_proveedor
end
CLOSE @cursor1
DEALLOCATE @cursor1




Asi he conseguido que todo se solucione y por fin me ha funcionado. Espero
que alguien mas le sirva de ejemplo . Lo curioso es como funciona el insert
into:

insert openquery(SERVIDORVINCULADO, 'select EMP_ID, EMP_DES from EMPRESAS
where 1=0')
values (@v_cod_proveedor ,@v_nombre_proveedor )




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