TSQL: crea una vista que accede a múltiples bases de datos

Tengo un caso especial,

por ejemplo, en la tabla ta de la base de datos A , almacena todos los productos que compro

 table ta( id, name, price ) 

en la tabla tb en la base de datos B , contiene todo el producto que la gente puede comprar

 table tb( id, name, price .... ) 

¿Puedo crear una vista en la base de datos A para enumerar todos los productos que no he comprado?

Sí, puede: la syntax de t-sql es la misma que en cualquier otra llamada de base de datos cruzada (dentro de un procedimiento almacenado, por ejemplo).

Para hacer referencia a sus tablas en la segunda base de datos, simplemente necesita:

[DatabaseName]. [Schema]. [TableName]

Entonces terminarías con algo así como

 CREATE VIEW [dbo].[YourView] as select a.ID, a.SomeInfo, b.SomeOtherInfo from TableInA a join DatabaseB.dbo.TableInB b on -- your join logic goes here 

Tenga en cuenta que esto solo funcionará en el mismo servidor: si sus bases de datos están en servidores diferentes, deberá crear un servidor vinculado.

Sí, las vistas pueden hacer referencia a tres objetos con nombre de parte:

 create view A.dbo.viewname as select ... from A.dbo.ta as ta join B.dbo.tb as tb on ta.id = tb.id where ... 

Habrá problemas en el camino con consultas cross db debido a la coherencia de copia de seguridad / restauración, problemas de integridad referencial y, posiblemente, mirrors de failover, pero esos problemas son inherentes a la división de datos en dbs.

Como indican las otras respuestas, puede usar la notación {LINKED_SERVER.} DATABASE.SCHEMA.OBJECT.

También debe saber que el encadenamiento de propiedad entre bases de datos está deshabilitado de manera predeterminada.

Por lo tanto, dentro de una base de datos, otorgar SELECT en una vista permite que un usuario que no tenga SELECT en las tablas subyacentes aún SELECCIONE de la vista. Es posible que esto no funcione en otra base de datos donde el usuario no tenga permisos en la tabla subyacente.