2011-04-10 94 views
0

Im做一個預約申請兩個表,並想知道如何將我處理以下情形;如果預訂有2個或更多的「額外」項目,我如何創建一個SP或觸發器甚至處理這個? SP我現在可以在預訂時使用一個額外的物品。我有什麼意義嗎?插入具有條件

ALTER PROCEDURE [dbo].[CreateBooking] 

@DateFrom datetime, 
@DateTo datetime, 
@RoomID int, 
@PersonID int, 
@ProductID int, 
@OrderAmount int 


AS 
BEGIN TRANSACTION 
SET NOCOUNT ON; 

INSERT INTO booking(created_on, startdate, enddate, room_id, person_id) 
VALUES (getdate(), @DateFrom, @DateTo, @RoomID, @PersonID) 

IF @@error <> 0 
ROLLBACK TRANSACTION 
ELSE 

INSERT INTO booking_details (booking_id,prod_id,order_amount) 
VALUES (SCOPE_IDENTITY(), @ProductID, @OrderAmount) 

COMMIT TRANSACTION 
+0

可以在澄清你的問題,請...你是問如何通過列表來存儲過程?如果是這樣,問以前多次... – 2011-04-10 01:21:28

+0

順便說一下,'SET NOCOUNT ON;'應該是BEGIN TRANSACTION – 2011-04-10 01:23:11

+0

外@米奇是啊,多數民衆贊成正是我一直在要求的,我只是不知道如何提出要求。無論如何,我已經搜索並找到了答案。謝謝 - 我現在在正確的地方也有「NOCOUNT」。 – Shuffz 2011-04-10 01:29:46

回答

0

您可以傳遞一個xml參數,然後遍歷它並寫入它們。

CREATE PROCEDURE SelectByIdList(@productIds XML)AS

DECLARE @Products TABLE(ID INT)

INSERT INTO @Products(ID)SELECT ParamValues.ID.value( '' 'VARCHAR(20)') FROM @ productIds.nodes( '/產品/ ID') 作爲ParamValues(ID)

SELECT * FROM 產品INNER JOIN @Products P於Products.ProductID = p.ID