2010-12-29 1 views
2

J'essaie de créer une procédure stockée sybase qui fait référence à une table temporaire, mais je ne connais pas la définition de cette table temporaire. Je pourrais regarder le proc et comprendre à quoi ressemble la table temporaire et la créer manuellement en premier, mais je suis confronté à environ 1000 procs (qui font référence à toutes sortes de tables temporaires) et cette solution serait extrêmement fastidieuse.Sybase stocké procs qui utilisent des tables temporaires. Problème de création

Je cherchais une approche plus stratégique mais pas de chance jusqu'à maintenant. J'apprécierais que vous puissiez partager vos pensées avec moi.

Répondre

3

Il semble que vous ne pouvez pas comprendre que le point de l'ensemble d'un #table est que:

  1. est temporaire

  2. il existe seulement dans le contexte de la procédure stockée qui crée

  3. il est privé

Therefo re créer un nouveau proc stocké pour "référencer" la # table d'un autre proc, n'est pas une chose raisonnable à tenter. Soit d'écrire un proc stocké complètement indépendant avec son propre #table, ou de changer le proc stocké d'origine de sorte que la table temporaire existe en dehors de son contexte (voir ci-dessous).

Vous devrez sauter à travers les cerceaux, et différents cerceaux pour différentes versions de Sybase, pour obtenir la définition ou les données dans de tels #tables.

  • Si vous pouvez attraper le moment lorsque l'un de ces procs stockées est exécuté, et vous avez sa privilège, vous pouvez certainement examiner la via DDL SybaseCentral ou tout autre outil DBA.

Si vous effectuez un exercice de documentation, il n'y a pas d'alternative à l'examen du code sproc; Si vous ne le faites pas, vous manquerez des aspects importants du #table qui est enterré dans le code.

Pour les tables temporaires qui sont destinés à partager (.-À-dire exister en dehors du contexte d'une procédure stockée), au lieu de:
CREATE TABLE #my_table ...
utilisation:
CREATE TABLE tempdb..my_table ... et execute qui en dehors tout proc , avant de compiler les procs.

0

Je pense que vous pouvez obtenir des métadonnées #table à partir des tables systd et syscolumns de tempdb. Regardez l'article http://www.sypron.nl/temptab.html de Rob Verschoor à propos du #table name et de l'astuce de chargement de dump tempdb.

Questions connexes