Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pouvez-vous avoir une clé étrangère sur une vue d'une table de serveur lié dans SQLServer 2k5 ?

Les clés étrangères ne peuvent pas être connectées à des objets non locaux - elles doivent référencer des tables locales. Vous obtenez l'erreur "nombre maximum de préfixes" car vous faites référence à la table avec un nom en 4 parties (LinkedServer.Database.Schema.Object), et un objet local n'aurait qu'un nom en 3 parties.

Autres solutions :

  1. Répliquer les données de la source (l'emplacement de la vue) sur le même serveur que la table sur laquelle vous essayez d'ajouter la clé. Vous pouvez effectuer cette opération toutes les heures, tous les jours ou autre, selon la fréquence à laquelle les données source changent.
  2. Ajoutez un déclencheur sur la table source pour envoyer toute modification à votre copie locale. Ce serait essentiellement le même que #1, mais avec une population immédiate de changements
  3. Ajoutez un déclencheur INSTEAD OF" à votre table qui vérifie manuellement la contrainte de clé étrangère en sélectionnant dans le serveur lié et en comparant la valeur que vous essayez d'INSERT/UPDATE. Si elle ne correspond pas, vous pouvez rejeter la modification .