2014-05-22 6 views
1

Contexte: Gestion SQL Server Management Studio 2008 R2insérer des données SQL dans la table a clé étrangère

DataTable: ProductID(PK, bigint), ProductNameID(FK, int), Price(Decimal) 

ProductNameTable: ProductNameID(PK, int), ProductName(varchar) 

donc j'ai besoin d'insérer des données comme "123,4, AAA" (Prix, ProductName) en DataTable mais avec ProductNameID est un FK,

Comment puis-je faire ça ???? Bec ProductNameID est auto-incrément

Ceci est le code que j'ai jusqu'à présent:

CREATE PROCEDURE DataInsertSP   
@Price DECIMAL(8, 2), @ProductName VARCHAR(20)  
AS 
BEGIN  

DECLARE @NewProductNameID INT  

INSERT INTO ProductNameTable(ProductName)  
VALUES (@ProductName)  

SELECT @NewProductNameID = SCOPE_IDENTITY()  

INSERT INTO DataTable(ProductNameID, Price)  
VALUES (@NewProductNameID, @Price); 
END; 

EXECUTE DataInsertSP 
@Price = 12.25  , @ProductName = 'Argo' 

S'il vous plaît me donner quelques conseils, Merci beaucoup

+0

ce qui ne va pas avec le code existant me semble bien, sauf que vous devez '@ NewProductNameID' être' BIGINT'. –

+0

Quelle erreur obtenez-vous? – briskovich

+0

Vous avez deux tables différentes pour une raison quelconque? Étant donné que le prix et le nom dépendent du productID, vous souhaitez une table unique pour toutes ces données afin d'être en forme normale. –

Répondre

0

1 chose que je peux penser est ce que si le produit le nom existe déjà? Pour cela, vous pouvez écrire cette procédure un peu différemment en ajoutant une petite vérification. Quelque chose comme ça ....

CREATE PROCEDURE DataInsertSP   
    @Price  DECIMAL(8, 2),  
    @ProductName VARCHAR(20)  
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @NewProductNameID BIGINT;  

SELECT @NewProductNameID = ProductID 
FROM ProductNameTable 
WHERE ProductName = @ProductName 

IF (@NewProductNameID IS NULL) 
BEGIN 
    INSERT INTO ProductNameTable(ProductName)  
    VALUES (@ProductName)  
    SELECT @NewProductNameID = SCOPE_IDENTITY(); 
END 

INSERT INTO DataTable(ProductNameID, Price)  
VALUES (@NewProductNameID, @Price); 

END; 
+0

Merci, vous êtes génial !!! enfin obtenir ce que je veux –

+0

Salut, @ M.Ali donc une question de plus, Devrais-je mettre une colonne Stats dans DataTable? par exemple. MeanOfPrice, SumOfPrice ??? Le contenu de ces colonnes est fait avant d'écrire dans la base de données –

+0

Il ne devrait pas y avoir de table Stats. Créez des vues pour extraire ces informations lors de l'exécution. –

Questions connexes