2010-04-12 4 views
1

J'ai deux tables, une table a une colonne rowguid et l'autre a une colonne auto-incrémentée mais les deux tables n'ont pas de clé primaire ou étrangère. Je veux créer une troisième table qui stocke la relation entre les deux tables ci-dessus. Quelqu'un peut-il me donner la manière correcte et la plus facile de le faire. Je suis nouveau en utilisant sql server. répondez-moicréer une nouvelle table ayant plusieurs à une relation entre les deux autres tables-sql server management studio

Répondre

0

Tout d'abord, vous devrez faire un appel sur la façon dont ces tables sont liées entre elles. Il doit y avoir une règle métier/logique pour ce faire, et ce serait l'association originale.

Ensuite, vous pouvez essayer quelque chose comme

DECLARE @TableGuid TABLE(
     GuidID UNIQUEIDENTIFIER DEFAULT NEWID(), 
     Val VARCHAR(10) 
) 

DECLARE @TableID TABLE(
     ID INT IDENTITY(1,1), 
     Val VARCHAR(10) 
) 

INSERT @TableGuid (Val) SELECT 'A' 
INSERT @TableID (Val) SELECT 'A' 

SELECT * FROM @TableGuid 
SELECT * FROM @TableID 

DECLARE @TableManyMany TABLE(
     GuidID UNIQUEIDENTIFIER, 
     ID INT, 
     PRIMARY KEY(GuidID, ID) 
) 

INSERT INTO @TableManyMany 
SELECT GuidID, 
     ID 
FROM @TableGuid g INNER JOIN 
     @TableID i ON g.Val = i.Val 

SELECT * 
FROM @TableManyMany 
+0

merci de répondre. est-ce le tsql? parce que je ne peux pas comprendre la syntaxe ici. comme INSERT @TableGuid (Val) SELECT 'A'. Pouvez-vous s'il vous plaît expliquer? et pour de nombreuses relations, ai-je encore besoin d'Inner Join? existe-t-il aussi un moyen facile de le faire en studio de gestion? – amby

+0

TSQL, @TableGuid serait une variable de table que vous pouvez déclarer. Si vous deviez l'exécuter dans le Management Studio, vous verriez le résultat. En outre, montrez-nous quelques détails/exemples de données, afin que nous puissions mieux comprendre votre structure de schéma/données et ce que la sortie attendue devrait être. Cela nous aidera à vous aider (http://www.imdb.com/title/tt0116695/) X-) –

+0

Merci. J'ai compris maintenant. – amby

0

Amby, jamais rien à une base de données que par un script. C'est une très mauvaise pratique d'utiliser l'interface graphique et vous avez besoin de casser l'habitude maintenant. Vous avez besoin de choses dans les scripts pour pouvoir les placer dans le contrôle des sources et les utiliser pour les déployer sur d'autres serveurs.

Jamais, et je ne veux dire jamais, avoir une table sans clé primaire. C'est le premier jour de la conception de la base de données. Si vous n'avez pas de clé primaire, avez-vous au moins un index unique? Sinon, vous pouvez obtenir des valeurs en double, ce qui est mauvais. Toute table sans un moyen d'identifier de manière unique une ligne est cassée. Fixez cela avant d'aller plus loin.

Ce dont vous avez également besoin, c'est de déterminer la relation entre les deux tables. Comment savez-vous quel enregistrement dans tablea doit correspondre à quel enregistrement dans tableb? Puisque vous avez deux types de données différents, ce n'est pas la relation, donc vous devez avoir un autre champ (ou une combinaison de champs) qui est le même dans les deux tables pour construire la relation. Si vous n'avez pas cela, quelle est la base de la relation. Veuillez montrer des exemples de données dans les deux tableaux et montrer quelles données vous voulez dans la table de bridge. Je crois que vous n'avez pas encore suffisamment réfléchi à la conception de la table en fonction de ce que vous avez posté.

Questions connexes