2010-03-22 17 views
12

¿Cómo puedo crear View on Linked Server db. Por ejemplo, tengo un servidor vinculado [1.2.3.4] en [5.6.7.8]. Ambos servidores db son SQL Sserver 2005. Quiero crear View en [5.6.7.8] usando table en el servidor vinculado.Create View using Linked Server db en SQL Server

EDIT:

Al crear utilizando el nombre completo, [1.2.3.4] .db.dbo.table, estoy consiguiendo este error.

Error de ejecución SQL.

instrucción SQL ejecutadas: SELECT * FROM 1.2.3.4.db.dbo.table (se puede ver entre paréntesis no están allí.) error Origen: .Net proveedor de datos SqlClient mensaje de error: Sintaxis incorrecta cerca '0.0'. ---> parte de la dirección IP.

Solo estoy creando esto en ManagementStudio, no lo uso porque aún no está creado. He cambiado la IP. En la imagen, puede ver que no hay corchetes alrededor de IP, pero se los proporcioné y, por error, estos corchetes se eliminan.

Gracias.

+0

Por favor, publique completo (o más) de la secuencia de comandos de creación de vista, así como el código utilizado para acceder a la vista. –

+0

555.555.555.555 no es una dirección IP válida. Cada número puede tener un máximo de 255 y debe ser una dirección IP válida. Por ejemplo, debería poder hacer ping a la dirección IP: ping 10.1.16.1. A menudo tiene más sentido usar el nombre del servidor en lugar de la dirección IP. – Ryan

+1

Gracias por su respuesta. 555.555.555.555 no es el IP que estoy usando. He cambiado esto deliberadamente – Kashif

Respuesta

16

Es necesario utilizar el nombre calificado de cuatro partes: linkedserver.database.schema.table

SELECT * FROM [1.2.3.4].Northwind.dbo.Customers 

Aquí hay un artículo de MSDN sobre accessing object names.

Es posible que desee para tratar de forma manual crear la vista, en lugar de utilizar las herramientas de administración de SQL:

CREATE VIEW [dbo].[sywx] 
AS 
    SELECT * 
    FROM [1.2.3.4].Atia.dbo.IpPbxDCR 
GO 

También recomiendo que utilice un nombre, si es posible, para el servidor vinculado en lugar de utilizar el IP dirección.

+0

Gracias por su respuesta. Por favor mira mi Editar. – Kashif

2

Si el servidor vinculado está configurado, que acaba de hacer referencia a tablas en él utilizando un nombre calificado de cuatro partes:

linkedserver.database.schema.table 

Así que si su nombre de servidor vinculado es [0.0.0.0], puede hacer referencia a una tabla como:

[0.0.0.0].database.schema.table 
+0

Gracias por su respuesta. Por favor mira mi Editar. – Kashif

0

También puede simplemente arrastrar y soltar el objeto de tabla/vista desde el servidor vinculado a su vista y Management Studio creará la referencia de cuatro partes para usted.

+0

Arrastrar y colocar desde un servidor vinculado definido en mi vista en Management Studio no funcionó; la interfaz (Management Studio 2008) no me permite arrastrar y soltar. Tal vez hay una configuración en el servidor vinculado que impide esto? –

0

Debe definir un servidor vinculado antes de que pueda acceder a él, ya que la entrada del servidor vinculado también contiene los detalles de autenticación.

Después de crear un servidor vinculado, puede acceder a sus bases de datos y sus objetos usando la notación de puntos servername.database. [Propietario] .object

10

Es un problema de gestión SQL Studio. Si intenta crear la vista utilizando Management Studio NEW VIEW, obtendrá esa sintaxis de error incorrecta.

Pero si se utiliza de consultas SQL:

CREATE VIEW [dbo].[viewname] 
AS 
    SELECT * 
    FROM [0.0.0.0].database.dbo.table 
GO 

entonces todo funcionará bien.

Para probar, verá la vista creada al actualizar las vistas. Si solo hace una consulta de selección de la vista verá los resultados de retorno de la vista.

Pero si intenta pasar al modo de diseño para esa vista e intenta ejecutar la consulta de diseño, el error volverá a aparecer aunque la vista se haya creado correctamente.

+0

gracias un millón por esto. Mi servidor vinculado tiene un guión en el nombre que arroja a Management Studio 2005. Su solución funciona en este sentido. –

+0

Ese era el problema que estaba teniendo. Estaba dando demasiada importancia a la advertencia 'Objeto no resuelto'. Gracias Phil. – Vic

2

su principal problema es nombrar su servidor de enlace con números (dirección IP). La única forma que funcionó para mí fue usar un nombre alfabético para mi servidor de enlace sin ningún punto '.' Puede utilizar estas líneas de código para agregar el servidor de enlace y autenticación:

EXEC sp_addlinkedserver 
     @server='TEST_LINK', 
     @srvproduct='', 
     @provider='SQLNCLI', 
     @datasrc='tcp:0.0.0.0' 

    EXEC sp_addlinkedsrvlogin 
     @useself='FALSE', 
     @rmtsrvname='TEST_LINK', 
     @rmtuser='user', 
     @rmtpassword='secret' 

Puede encontrar la respuesta original here

+0

Un IP funciona bien siempre que incluya la dirección entre corchetes. – influent

+0

Buen punto, gracias. –

+0

Esta es una gran solución para crear un servidor vinculado con un alias cuando su DNS no resuelve los nombres correctamente. – EAmez

1

Para servidores vinculados utilizando los períodos para un nombre de servicio web - esto no lo hará trabajo.
Los detalles del código y los pasos de la diferencia se publican en:
http://www.access-programmers.co.uk/forums/showthread.php?t=260764
p. FROM [V2.EGG.COM]..[NAT_DBA].[NV_WELLS]
En SSMS 2008, los corchetes alrededor de [V2.EGG.COM] .. son eliminados por el editor. Entonces la actualización falla porque es más de 4 partes.
Ha buscado en vano para encontrar una solución temporal.
La secuencia de comandos que funciona se publica en el enlace de arriba.