8
votes

Est-il possible de créer une table Temp sur un serveur lié?

Je fais des requêtes assez complexes contre un serveur lié à distance et il serait utile de pouvoir stocker des informations dans des tables temporaires, puis effectuer des jointures contre elle - toutes avec les données distantes. Création des tables temporaires localement et la jointure contre eux sur le fil est lente prohibitivement.

est-il possible de forcer la table TEM à créer sur le serveur distant? Supposons que je n'ai pas suffisamment de privilèges pour créer mes propres tables réelles (permanentes).


0 commentaires

5 Réponses :


5
votes

Cela fonctionne de SQL 2005 SP3 liée à SQL 2005 SP3 dans mon environnement. Toutefois, si vous inspectez la TEMPDB, vous constaterez que la table est en réalité sur l'instance locale et non l'instance distante. J'ai constaté cela comme une résolution sur d'autres forums et je voulais t'éloigner de cela. XXX


0 commentaires

2
votes

Il n'est pas possible de créer directement des tables temporaires sur un serveur distant lié. En fait, vous ne pouvez utiliser aucun DDL contre un serveur lié.

Pour plus d'informations sur les lignes directrices et les limitations de l'utilisation de serveurs liés, voir:

Lignes directrices pour l'utilisation de requêtes distribuées (livres SQL 2008 en ligne)

Un travail autour (et hors top de ma tête, et cela ne fonctionnerait que si vous aviez des autorisations sur le serveur distant), vous pourriez:

  • sur le serveur distant a une procédure stockée qui créerait une table persistante, avec un nom basé sur un paramètre de paramètre
  • La procédure stockée à distance exécuterait une requête puis insérez les résultats dans cette table
  • Vous interrogez ensuite localement contre ce tableau effectuant toutes les jointures à toutes les tables locales requises
  • Appelez une autre procédure stockée sur le serveur distant pour déposer la table distante lorsque vous avez terminé

    pas idéal, mais un travail possible autour.


0 commentaires

1
votes

Si la mémoire n'est pas une grande partie d'un problème, vous pouvez également utiliser des variables de table comme alternative aux tables temporaires. Cela a fonctionné pour moi lors de la gestion d'une procédure stockée avec besoin de stockage de données temporaire contre un serveur lié.

Plus d'info: p.ex. href = "http://databases.aspfaq.com/database/should-i-utilisation-a-temp-table-or-a-table-variable.html" rel = "nofollow "> Cette comparaison de variables de table et de tables temporaires, y compris des inconvénients d'utilisation de variables de table.


4 commentaires

L'inconvénient à ceci est que, autant que je sache, vous ne pouvez pas créer d'index sur les variables de table. (J'ai 2 ans de retard, je sais ...)


Il semble que vous puissiez Créer des index sur les variables de table . (Je ne savais pas ça non plus!)


Super! Merci d'avoir partagé. Je vais l'avoir à l'esprit dans le futur.


Malheureusement, je ne crois pas que cela fonctionne pour des serveurs liés - du moins pas avec EXECUTE-AT.



2
votes

Oui, vous pouvez mais il ne dure que pendant la durée de la connexion. Vous devez utiliser l'exécuté à la syntaxe; xxx pré>

sur serveur2, ce qui suit fonctionnera (pendant 1 minute); p> xxx pré>

mais il va ne fonctionne pas sur le serveur local. Incidemment Si vous ouvrez une transaction sur le deuxième serveur qui utilise ## exemple, l'objet reste jusqu'à la fermeture de la transaction. Il arrête également la création de la déclaration sur le premier serveur de remplir. I.e. Sur Server2 Exécuter et la transaction sur Server1 continuera indéfiniment. P>

BEGIN TRAN
SELECT * FROM ##example WITH (TABLOCKX)


0 commentaires

3
votes

J'ai 2 ans de retard à la fête mais vous pouvez accomplir cela en utilisant sp_executesql et l'alimentant une requête dynamique pour créer le tableau à distance.

EXEC REMOTESERVER.REMOTEDATABASE.REMOTESCHEMA.SP_EXECUTESQL N'CREATE Table ici '

Ceci exécutera la création de table Temp à l'emplacement distant ..


0 commentaires