web-dev-qa-db-fra.com

Créer une vue à l'aide de la base de données Linked Server dans SQL Server

Comment puis-je créer une vue sur le serveur lié db. Par exemple, j'ai un serveur lié [1.2.3.4] sur [5.6.7.8]. Les deux serveurs de base de données sont SQL Sserver 2005. Je veux créer la vue sur [5.6.7.8] en utilisant la table sur le serveur lié.

MODIFIER:

Lors de la création en utilisant le nom complet, [1.2.3.4] .db.dbo.table, j'obtiens cette erreur.

Erreur d'exécution SQL.

Instruction SQL exécutée: SELECT * FROM 1.2.3.4.db.dbo.table (Vous pouvez voir que les crochets ne sont pas là.) = Source de l'erreur: .Net SqlClient Data Provider Message d'erreur: syntaxe incorrecte près de "0.0". ---> partie de l'adresse IP.

Je crée juste ceci dans ManagementStudio, je ne l'utilise pas car il n'est pas encore créé. J'ai changé d'IP. Dans l'image, vous pouvez voir qu'il n'y a pas de crochets autour de l'IP mais je l'ai donné et en cas d'erreur, ces crochets sont supprimés.

Merci.

15
Kashif

Vous devez utiliser le nom qualifié en quatre parties: linkedserver.database.schema.table

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

Voici un article MSDN sur accès aux noms d'objets .

Vous voudrez peut-être essayer de créer manuellement la vue, plutôt que d'utiliser les outils de gestion SQL:

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

Je vous recommande également d'utiliser un nom, si possible, pour le serveur lié plutôt que d'utiliser l'adresse IP.

20
Ryan

C'est un problème SQL Management Studio. Si vous essayez de créer la vue à l'aide de la nouvelle vue de Management Studio, vous obtenez cette erreur de syntaxe incorrecte.

Mais si vous utilisez SQL Query:

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

alors cela fonctionnera.

Pour tester, vous verrez la vue créée lorsque vous actualisez les vues. Si vous effectuez simplement une requête de sélection à partir de la vue, vous verrez les résultats de retour de la vue.

Mais si vous essayez de passer en mode Création pour cette vue et essayez d'exécuter la requête de conception, l'erreur réapparaîtra même si la vue a été créée avec succès.

12
Phil Choo

votre problème principal est de nommer votre serveur de liaison avec des nombres (adresse IP). La seule façon qui a fonctionné pour moi a été d'utiliser un nom alphabétique pour mon serveur de liaison sans aucun point '.' Vous pouvez utiliser ces lignes de code pour ajouter votre serveur de liens et votre authentification:

    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'

Vous pouvez trouver la réponse originale ici

2
Hossein Sarshar

Si le serveur lié est configuré, vous y référencez simplement des tables en utilisant un nom qualifié en quatre parties:

linkedserver.database.schema.table

Donc, si le nom de votre serveur lié est [0.0.0.0], vous pouvez référencer une table comme:

[0.0.0.0].database.schema.table
2
David M

Pour les serveurs liés utilisant les points pour un nom de service Web, cela ne fonctionnera pas.
Les détails du code et les étapes de la différence sont affichés à l'adresse:
http://www.access-programmers.co.uk/forums/showthread.php?t=260764
par exemple. FROM [V2.Egg.COM]..[NAT_DBA].[NV_WELLS]
Dans SSMS 2008, les crochets autour de [V2.Egg.COM] .. sont supprimés par l'éditeur. Ensuite, la mise à jour échoue car elle comporte plus de 4 parties.
Ont cherché en vain pour trouver une solution.
Le script qui fonctionne est affiché sur le lien ci-dessus.

1
Rx_

Vous devez définir un serveur lié avant de pouvoir y accéder, car l'entrée du serveur lié contient également les détails d'authentification.

Après avoir créé un serveur lié, vous pouvez accéder à ses bases de données et à leurs objets en utilisant la notation par points nom_serveur.database. [Propriétaire] .object

0
devio

Vous pouvez également simplement faire glisser et déposer l'objet table/vue du serveur lié dans votre vue et Management Studio créera la référence en quatre parties pour vous.

0
Simon