Compartir a través de


Usar tipos definidos por el usuario en varias bases de datos

Cuando se crea un tipo definido por el usuario, éste es local para una única base de datos. Por lo tanto, un tipo definido por el usuario en una base de datos no se puede utilizar en una definición de columna de otra base de datos. Sin embargo, si el mismo tipo definido por el usuario se registra y se hace accesible en dos bases de datos, se puede convertir un valor de tipo definido por el usuario de una base de datos para utilizarlo en otra base de datos. Esta capacidad es útil cuando se desea realizar lo siguiente:

  • Llamar a un procedimiento almacenado que está definido en otra base de datos.

  • Realizar consultas en tablas definidas en dos bases de datos diferentes.

  • Seleccionar datos de una base de datos e insertarlos en otra.

Por ejemplo, suponga que se crea el tipo definido por el usuario u1 tanto en la base de datos db1 como en la base de datos db2. El procedimiento almacenado p2 sólo se crea en la base de datos db2 y toma un parámetro de tipo u1. Se puede llamar al procedimiento p2 con una instancia del tipo u1 de la base de datos db1.

USE db1
DECLARE @u u1
EXEC db2.dbo.p2 @u
GO

Otro ejemplo implica rellenar una tabla temporal de tempdb con los resultados de una consulta. El tipo definido por el usuario debe estar registrado en tempdb para que esta operación se pueda realizar correctamente.

INSERT INTO #t SELECT * FROM T 

No es necesario registrar un tipo definido por el usuario en tempdb cuando se utiliza un tipo definido por el usuario en una variable de tabla, o cuando un cursor utiliza el tipo definido por el usuario en una tabla de trabajo.

Cuando utilice tipos definidos por el usuario en varias bases de datos, debe recordar lo siguiente:

  • Los tipos deben tener el mismo nombre, incluso el mismo nombre CLR, y deben implementarse a través del mismo ensamblado en ambas bases de datos. Los ensamblados de dos bases de datos son idénticos si tienen el mismo nombre, nombre seguro, referencia cultural, versión, conjunto de permisos de acceso al código y contenido binario.

  • Debe disponer de los permisos SELECT y EXECUTE en cada columna de tipo definido por el usuario a la que se hace referencia en la consulta. Estos permisos se comprueban respecto a la base de datos donde está definida cada columna.

  • Si un tipo implementado en un ensamblado llama a un método en otro ensamblado, la llamada entre ensamblados se comprueba del mismo modo que si el tipo definido por el usuario se emitiera sin atravesar bases de datos.