2014-05-22 136 views
1

背景:SQL服務器管理Studio 2008的R2SQL插入數據到表有外鍵

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

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

所以我需要像「123.4,AAA」(價格,產品名稱)的數據插入到數據表中,但與ProductNameID是FK,

我該怎麼做? BEC ProductNameID是自動遞增

這是我的代碼至今:

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' 

請給我一些建議,非常感謝

+0

現有的代碼看起來不錯,除了你需要'@ NewProductNameID'是'BIGINT'。 –

+0

你有什麼錯誤? – briskovich

+0

任何原因你有兩個不同的表?由於價格和名稱都依賴於productID,因此您希望爲所有這些數據創建一個表,以便以正常形式使用。 –

回答

0

1件事我能想到的是什麼,如果產品名稱已經存在?爲此,您可以通過添加一點檢查來編寫此過程。像這樣的東西....

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

謝謝,你真棒!!!終於得到我想要的 –

+0

嗨,@ M.Ali所以還有一個問題,我應該在DataTable中添加一些Stats列嗎?例如。 MeanOfPrice,SumOfPrice ???這些列的內容在寫入數據庫之前完成 –

+0

應該沒有統計表。創建視圖以在運行時提取此信息。 –