2009-01-25 7 views
1

J'ai plusieurs tables dans ma base de données qui sont interdépendantes. J'ai une table (table 1) qui a eu des données insérées et l'incrément automatique d'identification. Une fois que cette ligne a un ID je veux l'insérer dans une table (table trois) avec un autre ensemble d'ID qui vient d'un formulaire (cette donnée sera aussi dans une table, donc elle pourrait partir de cette table), la même forme que les données qui sont allées dans la première table proviennent.Insérer des insertions dans la même table

Les deux ID ensemble forment la clé primaire de la troisième table.

Comment puis-je faire cela, c'est de montrer que plus d'un ID est joint à un seul ID pour autre chose.

Merci.

+0

Veuillez fournir un exemple de code. Est-ce une question de conception? Ou une question de déclenchement? Si oui, incluez le code du déclencheur. –

+0

C'est un genre de question possible, je n'ai pas encore de code car je ne sais pas comment le faire du tout, je peux faire un seul insert sur une gâchette sur une de mes tables mais ce n'est pas ce que je fais. Je demande. – user45344

+0

Juste parce que vous pouvez, ne signifie pas que vous devriez. Je ne sais pas assez sur votre cas pour le dire, mais les déclencheurs semblent souvent découler du désir de quelqu'un d'afficher des prouesses techniques. J'avoue que je l'ai fait une ou deux fois. – dkretz

Répondre

0

Je pense que vous pouvez probablement faire ce que vous décrivez (il suffit d'écrire les INSERTs à la table 3) dans le déclencheur de la table 1) mais vous devrez mettre les informations supplémentaires pour la table 3 rangées dans votre table 1 rangée , ce qui n'est pas très intelligent.

Je ne vois pas pourquoi vous feriez cela au lieu d'écrire les INSERT dans votre code, où quelqu'un le lisant peut voir ce qui se passe. Le problème avec les déclencheurs est qu'ils facilitent la dissimulation de la logique métier dans la base de données. Je pense (et je crois que je suis majoritaire ici) qu'il est plus facile de comprendre, de gérer, de maintenir et de traiter en général une application où toutes les règles commerciales existent dans le même domaine général.

Il existe des raisons d'utiliser des déclencheurs (pour propager des valeurs dénormalisées, par exemple) tout comme il existe des raisons d'utiliser des procédures stockées. Je vais affirmer qu'ils sont en grande partie liés à des domaines critiques pour la performance. Ou devrait être.

1

Vous ne pouvez pas faire cela par le biais d'un déclencheur car le déclencheur ne dispose que des données que vous avez déjà insérées et non des données actuellement présentes uniquement dans votre interface utilisateur. Normalement, la façon dont vous gérez cette situation est que vous écrivez un proc stocké qui insère la réunion, retourne la valeur de l'id (en utilisant scope_identity() dans SQL Server, mais je suis sûr que d'autres bases de données auraient la méthode ID généré aussi bien). Ensuite, vous utiliserez cette valeur pour insérer dans l'autre table les autres valeurs dont vous avez besoin pour cette table. Vous voudriez bien sûr emballer le tout dans une transaction.

Questions connexes