在這種情況下,我更喜歡的一種選擇是創建一個存儲過程,它接受必要的輸入參數,然後將兩個輸入輸入到事務中的兩個表中。你控制什麼方式是怎麼回事:
(假設SQL Server 2005中,和ID字段是INT IDENTITY - 正確的?)
CREATE PROCEDURE dbo.InsertQuestion
@Datecreated SMALLDATETIME, @Category_ID INT,
@Question NVARCHAR(MAX), @Timelimit SMALLDATETIME,
@helper NVARCHAR(MAX)
AS BEGIN
-- start transaction and a TRY..CATCH block
BEGIN TRANSACTION
BEGIN TRY
-- insert values into "Questions" table
INSERT INTO
dbo.Questions(DateCreated, Category_ID, Question, TimeLimit, Helper)
VALUES
(@DateCreated, @Category_ID, @Question, @TimeLimit, @Helper)
-- retrieve the ID of the newly inserted row
DECLARE @QuestionID INT
SET @QuestionID = SCOPE_IDENTITY()
-- determine the user ID from SQL Server
DECLARE @UserID INT
SET @UserID = SUSER_ID()
-- insert values into "User_Questions" table
INSERT INTO
dbo.UserQuestions(QuestionID, UserID, DateCreated, Helper)
VALUES
(@QuestionID, @UserID, @DateCreated, @Helper)
-- commit transaction, if everything went well
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- handle your error, e.g. by logging to a table or something.....
ROLLBACK TRANSACTION
END CATCH
END
觸發器是非常難以得到正確的,他們不規模非常好 - 我會盡可能避免觸發器(並非總是可能,但通常是這樣) -
** 1。)**爲什麼要在兩個表中保留相同的日期?這是多餘的,不要這樣做。 ** 2。)**應該如何知道'User_ID'值來自哪裏?你不是那麼說的。 ** 3。)**是否有任何問題可以屬於多個用戶? – Tomalak 2011-05-15 08:29:52
你到目前爲止嘗試過什麼?基於MSDN http://msdn.microsoft.com/en-us/library/ms189799.aspx – gbn 2011-05-15 08:30:37
在這種情況下,我更喜歡的一種選擇是創建一個採用必要輸入參數的存儲過程,然後執行你的兩個輸入到事務中的兩個表中。這樣你就可以控制正在發生的事情。觸發器非常難以正確,它們不能很好地擴展 - 如果有可能,我會盡量避免觸發器(並不總是可能的,但通常是這樣) – 2011-05-15 08:35:54