Error con proceso TRIGGER en SQL SERVER

16/05/2006 - 17:30 por Alexandra | Informe spam
Buenas,

estoy intentando crear un desencadenador que en el momento en que se inserte
o modifique cualquier dato en la Tabla1, automáticamente me actualice los
datos en una tabla (Tabla_Db1) externa en access. He creado el ODBC y me la
consulta correctamente, el caso es que al insertar una línea en Tabla1, el
trigger me peta, me da el siguiente error:

Servidor: mensaje 7391, nivel 16, estado 1, procedimiento prueba_ins, línea 16

No se puede realizar la operación. El proveedor OLE DB 'MSDASQL' no pudo
iniciar una transacción distribuida.
[OLE/DB provider returned message: [Microsoft][Controlador ODBC Microsoft
Access]Atributo o identificador de opción no válido ]
Traza de error de OLE DB [OLE/DB Provider 'MSDASQL'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

Alguien tiene alguna idea? Os adjunto el código del trigger a ver si veis
algún fallo. Muchas gracias.

CREATE TRIGGER prueba_ins ON dbo.Tabla1
FOR INSERT
AS
BEGIN
DECLARE @ins_ident int
DECLARE @ins_nombre char
DECLARE @ins_apellidos char
DECLARE @ins_telefono char

select @ins_ident = ident from inserted
select @ins_nombre = nombre from inserted
select @ins_apellidos = apellidos from inserted
select @ins_telefono = telefono from inserted

insert into openquery(PRUEBA, 'select * from Tabla_Db1')
values (@ins_ident, @ins_nombre, @ins_apellidos, @ins_telefono)
END

De momento solo estoy intentando que funcione con la operación de insertar.
Cuando le intento insertar la siguiente fila es cuando peta y da el error:

insert into Tabla1 values (3,'asdfas','etretre','89834')

Las tablas tienen exactamente los mismos campos, es muy sencilla, consta de
identificador, nombre, apellidos y telefono. La he creado de prueba para
hacerlo funcionar y posteriormente pasarlo a la base de datos real que es
mucho más compleja. Teneis alguna idea por favor??

Gracias!!!

CRM Woman

Preguntas similare

Leer las respuestas

#1 Isaias
16/05/2006 - 18:01 | Informe spam
Alexandra

El problema, creo yo, esta en que esta utilizando OPENQUERY para hacer un
INSERT en una base externa (Access) y este comado solo sirve para EXTRAER
informacion de una fuente externa a SQL

insert into openquery

No creo que funcione.
Saludos
IIslas


"Alexandra" escribió:

Buenas,

estoy intentando crear un desencadenador que en el momento en que se inserte
o modifique cualquier dato en la Tabla1, automáticamente me actualice los
datos en una tabla (Tabla_Db1) externa en access. He creado el ODBC y me la
consulta correctamente, el caso es que al insertar una línea en Tabla1, el
trigger me peta, me da el siguiente error:

Servidor: mensaje 7391, nivel 16, estado 1, procedimiento prueba_ins, línea 16

No se puede realizar la operación. El proveedor OLE DB 'MSDASQL' no pudo
iniciar una transacción distribuida.
[OLE/DB provider returned message: [Microsoft][Controlador ODBC Microsoft
Access]Atributo o identificador de opción no válido ]
Traza de error de OLE DB [OLE/DB Provider 'MSDASQL'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

Alguien tiene alguna idea? Os adjunto el código del trigger a ver si veis
algún fallo. Muchas gracias.

CREATE TRIGGER prueba_ins ON dbo.Tabla1
FOR INSERT
AS
BEGIN
DECLARE @ins_ident int
DECLARE @ins_nombre char
DECLARE @ins_apellidos char
DECLARE @ins_telefono char

select @ins_ident = ident from inserted
select @ins_nombre = nombre from inserted
select @ins_apellidos = apellidos from inserted
select @ins_telefono = telefono from inserted

insert into openquery(PRUEBA, 'select * from Tabla_Db1')
values (@ins_ident, @ins_nombre, @ins_apellidos, @ins_telefono)
END

De momento solo estoy intentando que funcione con la operación de insertar.
Cuando le intento insertar la siguiente fila es cuando peta y da el error:

insert into Tabla1 values (3,'asdfas','etretre','89834')

Las tablas tienen exactamente los mismos campos, es muy sencilla, consta de
identificador, nombre, apellidos y telefono. La he creado de prueba para
hacerlo funcionar y posteriormente pasarlo a la base de datos real que es
mucho más compleja. Teneis alguna idea por favor??

Gracias!!!

CRM Woman
Respuesta Responder a este mensaje
#2 Alejandro Mesa
17/05/2006 - 02:13 | Informe spam
Alexandra,

Los triggers se ejecutan dentro de la misma transaccion que la sentencia que
los disparo y eso hace que el insert / update sobre tu db en Access se sume
a la transaccion. Como la db es externa, SQL Server usa MS-DTC para manejar
la transaccion distribuida, pero MS Access no soporta este tipo de
transacciones y por tanto la operacion fracasa en el momento que MS Access no
puede unirse a la transaccion.

Trata desde afuera del trigger.


AMB

"Alexandra" wrote:

Buenas,

estoy intentando crear un desencadenador que en el momento en que se inserte
o modifique cualquier dato en la Tabla1, automáticamente me actualice los
datos en una tabla (Tabla_Db1) externa en access. He creado el ODBC y me la
consulta correctamente, el caso es que al insertar una línea en Tabla1, el
trigger me peta, me da el siguiente error:

Servidor: mensaje 7391, nivel 16, estado 1, procedimiento prueba_ins, línea 16

No se puede realizar la operación. El proveedor OLE DB 'MSDASQL' no pudo
iniciar una transacción distribuida.
[OLE/DB provider returned message: [Microsoft][Controlador ODBC Microsoft
Access]Atributo o identificador de opción no válido ]
Traza de error de OLE DB [OLE/DB Provider 'MSDASQL'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

Alguien tiene alguna idea? Os adjunto el código del trigger a ver si veis
algún fallo. Muchas gracias.

CREATE TRIGGER prueba_ins ON dbo.Tabla1
FOR INSERT
AS
BEGIN
DECLARE @ins_ident int
DECLARE @ins_nombre char
DECLARE @ins_apellidos char
DECLARE @ins_telefono char

select @ins_ident = ident from inserted
select @ins_nombre = nombre from inserted
select @ins_apellidos = apellidos from inserted
select @ins_telefono = telefono from inserted

insert into openquery(PRUEBA, 'select * from Tabla_Db1')
values (@ins_ident, @ins_nombre, @ins_apellidos, @ins_telefono)
END

De momento solo estoy intentando que funcione con la operación de insertar.
Cuando le intento insertar la siguiente fila es cuando peta y da el error:

insert into Tabla1 values (3,'asdfas','etretre','89834')

Las tablas tienen exactamente los mismos campos, es muy sencilla, consta de
identificador, nombre, apellidos y telefono. La he creado de prueba para
hacerlo funcionar y posteriormente pasarlo a la base de datos real que es
mucho más compleja. Teneis alguna idea por favor??

Gracias!!!

CRM Woman
Respuesta Responder a este mensaje
#3 Alexandra
17/05/2006 - 10:38 | Informe spam
Pues no consigo hacerlo funcionar, estoy apunto de estirarme de los pelos,
que desesperación...

Muchas gracias de todos modos.

CRM Woman


"Alejandro Mesa" wrote:

Alexandra,

Los triggers se ejecutan dentro de la misma transaccion que la sentencia que
los disparo y eso hace que el insert / update sobre tu db en Access se sume
a la transaccion. Como la db es externa, SQL Server usa MS-DTC para manejar
la transaccion distribuida, pero MS Access no soporta este tipo de
transacciones y por tanto la operacion fracasa en el momento que MS Access no
puede unirse a la transaccion.

Trata desde afuera del trigger.


AMB

"Alexandra" wrote:

> Buenas,
>
> estoy intentando crear un desencadenador que en el momento en que se inserte
> o modifique cualquier dato en la Tabla1, automáticamente me actualice los
> datos en una tabla (Tabla_Db1) externa en access. He creado el ODBC y me la
> consulta correctamente, el caso es que al insertar una línea en Tabla1, el
> trigger me peta, me da el siguiente error:
>
> Servidor: mensaje 7391, nivel 16, estado 1, procedimiento prueba_ins, línea 16
>
> No se puede realizar la operación. El proveedor OLE DB 'MSDASQL' no pudo
> iniciar una transacción distribuida.
> [OLE/DB provider returned message: [Microsoft][Controlador ODBC Microsoft
> Access]Atributo o identificador de opción no válido ]
> Traza de error de OLE DB [OLE/DB Provider 'MSDASQL'
> ITransactionJoin::JoinTransaction returned 0x8004d00a].
>
> Alguien tiene alguna idea? Os adjunto el código del trigger a ver si veis
> algún fallo. Muchas gracias.
>
> CREATE TRIGGER prueba_ins ON dbo.Tabla1
> FOR INSERT
> AS
> BEGIN
> DECLARE @ins_ident int
> DECLARE @ins_nombre char
> DECLARE @ins_apellidos char
> DECLARE @ins_telefono char
>
> select @ins_ident = ident from inserted
> select @ins_nombre = nombre from inserted
> select @ins_apellidos = apellidos from inserted
> select @ins_telefono = telefono from inserted
>
> insert into openquery(PRUEBA, 'select * from Tabla_Db1')
> values (@ins_ident, @ins_nombre, @ins_apellidos, @ins_telefono)
> END
>
> De momento solo estoy intentando que funcione con la operación de insertar.
> Cuando le intento insertar la siguiente fila es cuando peta y da el error:
>
> insert into Tabla1 values (3,'asdfas','etretre','89834')
>
> Las tablas tienen exactamente los mismos campos, es muy sencilla, consta de
> identificador, nombre, apellidos y telefono. La he creado de prueba para
> hacerlo funcionar y posteriormente pasarlo a la base de datos real que es
> mucho más compleja. Teneis alguna idea por favor??
>
> Gracias!!!
>
> CRM Woman
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida