2013-04-05 5 views
0

J'ai deux tables appelées VisitorMaster et SupportVisitor. In VisitorMaster J'ai une colonne appelée VisitorID1 qui est une clé primaire (mais pas une colonne d'identité). Dans SupportVisitor J'ai une colonne appelée VisitorID2 qui agit comme une clé étrangère pour la table VisitorMaser.Mais mon exigence est que je veux que la dernière valeur de colonne générée de VisitorID1 soit insérée dans VisitorID2 du tableau SupportVisitor. Comment y parvenir .. S'il vous plaît Help ??Affectation de la valeur de colonne de clé primaire à la colonne de clé étrangère

Répondre

0

Après avoir inséré un enregistrement dans une table avec une identité-colonne, vous pouvez récupérer ces lignes identité numérique en sélectionnant l'identité de portée:

INSERT INTO VisitorMaster (Name) VALUES ('Jane doe') 

SELECT SCOPE_IDENTITY() -- Will retrieve ID for Jane Doe 
+0

-1 Cela ne fonctionnera pas: L'OP a spécifiquement déclaré que 'VisitorID1' n'est PAS une colonne d'identité et donc SCOPE_IDENTITY ne renverra pas sa valeur, et le' INSERT' ne l'incrémentera en aucune façon. Cette réponse est inutile et ne se rapporte pas à la question. –

+0

Ah touche, mauvaise lecture de ma part. – Elken

+0

Merci Elken..My colonne 'VisitorID1' n'est pas une colonne d'identité .. est-il un moyen de sortir pour cela ..ou je suis lié pour en faire une colonne d'identité. – Nitesh

1

Je pense votre meilleur pari serait de faire en sorte que vous enveloppez votre INSERT dans le tableau VisitorMaster avec une transaction et que, dans la transaction, vous obtenez la valeur VisitorID en utilisant les données que vous avez insérées pour l'interroger et enfin en la mettant dans SupportVisitor avant de valider ou d'annuler le lot.

Vous pouvez utiliser un déclencheur pour faire cela, mais les déclencheurs sont des choses désagréables qui peuvent avoir toutes sortes de conséquences inattendues puisque le fonctionnement est plus ou moins invisible, donc je les évite.

En fin de compte, je voudrais savoir pourquoi avez-vous un PK de substitution non-identité dans une colonne? C'est un assez mauvais design. Soit utiliser une clé naturelle (combinaison de prénom, nom, horodatage ou tout ce qui fait une clé naturelle unique) ou utiliser un champ d'identité auto-incrémenté comme PK de substitution (après quoi peut utiliser SCOPE_IDENTITY) car sinon votre clé est assez fragile et pas garanti d'être unique. Comment générez-vous cette valeur? Est-ce qu'il est tenu dans un tableau séparé (j'ai su que certaines bases de données utilisent ce type de système, en particulier les bases de données EAV, et ce n'est pas un bon système et n'est pas plus facile à gérer que des valeurs arbitraires)? Si vous avez une quelconque influence sur ce design, alors vous devriez le changer parce que cela sent et est susceptible de vous causer beaucoup, BEAUCOUP plus de problèmes à l'avenir.

+0

merci Steve.En fait j'ai créé une procédure de magasin appelée 'USPGETMAXID' et l'ai exécutée sur la table 'VisitorMaster' pour incrémenter la valeur de la colonne 'VisitorID1' de 1 pour chaque fois que l'utilisateur saisit quelque chose sur la table. 'VisitorID1' une 'Colonne d'Identité' ou je peux y arriver grâce à ma procédure .. s'il vous plaît aidez-moi? – Nitesh

+0

A moins que vous n'ayez vraiment besoin de l'éviter, alors je ferais certainement de la colonne une colonne d'identité. Cela signifie que vous n'avez pas besoin d'avoir le SP et que vous n'avez donc pas besoin de le maintenir. Les clés naturelles et substitutives ont leur place mais elles devraient toutes être utilisées au mieux et en fonction de ce que nous savons de votre question. Je dirais qu'un champ d'identité est ce que vous recherchez ici pour un minimum d'effort et une facilité d'utilisation maximale. –

+0

Merci beaucoup très steve. – Nitesh

Questions connexes