Tengo un servidor vinculado, Quiero agregar un registro a la tabla en el servidor vinculado, ¿Es posible tomar @@ identidad de otro servidor con servidor vinculado? (SQL Server 2005)get @@ Identidad de otro servidor (servidor vinculado)
Respuesta
Puede crear un procedimiento almacenado en su servidor vinculado que devolverá la identidad.
Debería estar usando SCOPE_IDENTITY()
en lugar de @@IDENTITY
, por cierto.
Consulte this pregunta relacionada (¿La mejor manera de obtener la identidad de la fila insertada?).
Usando SQL Server 2012 aquí.
He intentado método GBN pero me dio este error:
Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.
Además de eso, tenía que añadir el SET XACT_ABORT ON;
antes de mi declaración como estaba usando transacciones distribuidas.
Así que terminé resolver tanto los problemas al hacer esto:
BEGIN DISTRIBUTED TRANSACTION
SELECT idcolumn
FROM OPENQUERY(MyRemoteServer, '
SET XACT_ABORT ON;
INSERT INTO MyRemoteBD.dbo.SomeTable(col1,col2, ...)
OUTPUT INSERTED.idcolumn
VALUES (val1,val2, ...);
SET XACT_ABORT OFF');
COMMIT
Y yo era capaz de ejecutar esto en una transacción distribuida al obtener la identidad de mi inserción.
Un comportamiento extraño acerca de esta afirmación es que si ejecuto la instrucción Insertar sin abrir previamente la Transacción distribuida (debe ser la distribuida) devolverá la siguiente identidad, pero no insertará nada. No tengo idea de por qué está sucediendo esto.
Editar:
probado este otro método y ha funcionado sin la necesidad de establecer XACT_ABORT ON
sobre las transacciones distribuidas y funciona bien sin transacciones.
exec [MyRemoteServer].MyRemoteBD.dbo.sp_executesql N'
INSERT INTO SomeTable (col1,col2,...)
VALUES (val1,val2,...);
SELECT SCOPE_IDENTITY()'
- 1. La inserción de identidad en el servidor vinculado falla
- 2. Consultar un servidor sql vinculado
- 3. Consulta del servidor vinculado dinámico
- 4. Crear tabla en servidor vinculado?
- 5. Servidor de identidad WSO2 api
- 6. servidor vinculado en SQL Server Express
- 7. ¿La mejor manera de obtener la identidad de la fila insertada en el servidor vinculado?
- 8. Servidor vinculado con autorización no válida
- 9. error al insertar en el servidor vinculado
- 10. Cómo crear el servidor vinculado MySQL
- 11. columna de identidad en el servidor Sql
- 12. SQL tema de la identidad del servidor
- 13. ¿Transfiere MongoDB a otro servidor?
- 14. MySQL: SELECT desde otro servidor
- 15. Mover RavenDb a otro servidor
- 16. Insertar resultados del procedimiento almacenado del servidor vinculado
- 17. Servidor SQL: ¿Cómo llamar a una función definida por el usuario (UDF) en el servidor vinculado?
- 18. consulta lenta cuando se conecta al servidor vinculado
- 19. Tiene problemas para agregar un servidor SQL vinculado
- 20. Cómo crear un servidor vinculado con un puerto no predeterminado
- 21. ¿Insertar datos de un servidor a otro?
- 22. TFS: Pasar de un servidor a otro
- 23. Servidor SQL cómo quitar la identidad de una columna
- 24. Xcode no puede verificar la identidad del servidor "github.com", Xcode
- 25. Servidor de prueba HTTP que acepta llamadas GET/Post
- 26. Obtener de un servidor de git y enviar a otro servidor usando Jenkins
- 27. Cómo hacer una petición AJAX a otro servidor
- 28. Calcular servidor de servidor smtp
- 29. En Node.js, ¿cómo hago que una llamada de servidor sea una función en otro servidor?
- 30. Si tengo un repositorio de GIT (vacío) en mi servidor, ¿puedo moverlo a otro servidor fácilmente?
¿Cuál es su significado de crear procedimiento almacenado? Estoy ejecutando este código de servidor vinculado: "insertar en [(local)]. Identificación.dbo.test (nombre) values ('gg')" ahora ¿qué debo hacer para obtener la identificación del registro insertado? –
@Raymond Morphy - Quiero decir exactamente eso. Cree un procedimiento almacenado con ese código en el servidor vinculado, haga que devuelva 'SCOPE_IDENTITY()' y usted debería estar bien. Su consulta solo tiene acceso a las variables del servidor _local_, no a las variables del servidor remoto. – Oded
¿Significa que debo colocar mi declaración de inserción y luego SCOPE_IDENTITY() después de eso en el procedimiento almacenado en el servidor remoto? –