Usar un servidor vinculado con OPENQUERY en un proyecto de base de datos


10

Tengo un SQL Server 2008 que ejecuta una base de datos que quiero incluir en TFS. Por lo tanto, utilicé un proyecto de base de datos de Visual Studio 2013 donde importé la base de datos. Después de corregir un montón de errores, estoy atascado y solo me queda un error:

En una vista, los desarrolladores solían OPENQUERYacceder a un servidor vinculado. Entonces importé un DACPAC que contiene la base de datos correcta y lo agregué al proyecto Add Database Referenceutilizando las siguientes opciones de referencia.

Configuración para referencia de base de datos

Versión de script inicial

Aquí hay una versión más corta de la creación de la vista original:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Esto condujo al siguiente error:

Error 136 SQL71501: Vista: [dbo]. [VwStatus] tiene una referencia no resuelta al objeto [LinkedServer].

Primer intento

Así que intenté insertar la variable de nombre del servidor

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Lo que lleva a

Error 176 SQL46010: sintaxis incorrecta cerca de $ (LinkedServer).

Intentos adicionales

Jugueteé un poco y probé lo siguiente (con y sin los identificadores de comillas habilitados):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

Siempre recibo un error.

No tengo idea de lo que estoy pasando por alto aquí. ¿Vos si? ¡Gracias por tu tiempo!

(Lamentablemente no puedo agregar la etiqueta visual-studio-2013, así que usé visual-studio)

Respuestas:


9

Me las he arreglado para que funcione:

Creé un nuevo proyecto de base de datos master. Allí creé una carpeta Server Objecty un archivo LinkedServer.sql. En el archivo SQL agregué el servidor vinculado:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

Después de agregar el Proyecto de base de datos mastera mi solución y hacer referencia a él en mi proyecto de base de datos original, pude construir el proyecto utilizando la sintaxis inicial;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Todavía no puedo hacer que esto funcione a pesar de tener un proyecto maestro con el archivo LinkedServers.sql allí
prueba el

Bueno, es difícil ayudar sin más información. Quizás sea mejor hacer otra pregunta. Es importante hacer referencia a su proyecto maestro en su solución. de lo contrario, esto funcionó para mí exactamente como se describe.
Chake

Dentro de su solución, ¿tiene un dacpac (s) o proyecto (s) con los DBA de LinkedServer?
Martin Meeser

Hola, no puedo recordar, pero escribí en el segundo párrafo que he usado dacpacs. Pero para la solución final hice referencia a un proyecto de base de datos para la base de datos maestra.
Chake

1
Tenga en cuenta que debe asegurarse de que su archivo 'LinkedServer.sql' tenga una acción de compilación establecida en 'Compilar'. De manera molesta, VS no parece reconocer el servidor vinculado desde una secuencia de comandos previa a la implementación, o todo esto no sería necesario.
Taran
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.