2011-04-15 69 views
0

順序表訂單查詢的OrderDetail

OrderId 
CustomerId 
Date 
Total 

訂單明細

OrderDetailId 
OrderId 
ProductId 
Quantity 
UnitPrice 

我使用訂單查詢

INSERT INTO dbo.Orders (CustomerId, Date, Total) 
VALUES (1, 2011-04-10, 50000); 

我執行的OrderDetail查詢多次。

DECLARE @OrderID int 
SET @OrderID = SCOPE_IDENTITY() 

INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice) 
VALUES (@OrderID,11,2,50000) 

的這裏的問題是,@OrderID變化,不再是價值從Orders表的外鍵後,我執行這個查詢第二次匹配。所以我應該怎麼做才能解決這個問題?

+0

您是否第二次調用從DECLARE到VALUES的所有內容?或者只是第二個插入? – taylonr 2011-04-15 12:30:38

+0

一切從聲明到價值.....爲什麼它錯了?如果我從插入調用它的價值..我得到一個錯誤,說@OrderId沒有宣佈 – user478636 2011-04-15 12:36:54

回答

1

I.您必須使用相同的連接到:

插入的順序爲:

INSERT INTO dbo.Orders (CustomerId, Date, Total) 
VALUES (1, 2011-04-10, 50000); 

檢索SCOPE_IDENTITY()和它在你的代碼存儲在某個地方(你沒有帶供應在.NET代碼,所以我可以給你更準確的建議):

command.CommandText = "SELECT SCOPE_IDENTITY()"; 
int lastOrderId = (int)command.ExecuteScalar(); 

II.然後(相同的連接與否):使用

插入訂單明細:

- 串聯:

"INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice) 
VALUES ('" + lastOrderId.ToString() + "',11,2,50000)" 

- 或Parameters

command.Parameters.Add("@OrderID", SqlDbType.Int); 
command.Parameters("@OrderID").Value = lastOrderId; 

INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice) 
VALUES (@OrderID,11,2,50000) 
+0

你確定command.ExecuteScalar需要1參數? 我收到此錯誤 的方法,沒有超載「的ExecuteScalar」需要1 – user478636 2011-04-15 12:50:54

+0

當然沒有;)我在這裏* HTTP固定的代碼(文件://msdn.microsoft.com/en-us/library/system.data。 sqlclient.sqlcommand.executescalar.aspx *) – manji 2011-04-15 12:57:28

1

如果您的訂單詳細作爲標識字段,那麼當您調用INSERT INTO dbo.OrderDetail時,它將更改SCOPE_IDENTITY。您需要爲每個訂單條目設置一次或@OrderID一次,而不是再次調用SCOPE_IDENTITY,直到您向Orders表中添加另一列。

--Run this once per order 
INSERT INTO dbo.Orders (CustomerId, Date, Total) 
VALUES (1, 2011-04-10, 50000); 

--Run this once per order 
DECLARE @OrderID int 
SET @OrderID = SCOPE_IDENTITY() 

--Run this once per orderdetail 
INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice) 
VALUES (@OrderID,11,2,50000) 
+0

多數民衆贊成我一直在努力做的,它只是它給出了錯誤,你必須聲明@OrderId。 – user478636 2011-04-15 12:53:29

+0

你是在SQL還是在某些客戶端代碼中運行這些? – taylonr 2011-04-15 13:04:26