Одним из вариантов, который я бы предпочел в этом случае, было бы создание хранимой процедуры, которая принимает необходимые входные параметры, а затем выполняет два ваших ввода в две таблицы в транзакции.Таким образом, вы контролируете, что происходит:
(это предполагает, что SQL Server 2005 и поля идентификатора имеют значение 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
Триггеры, как известно, трудно сделать правильно,они не очень хорошо масштабируются - я бы старался избегать триггеров, если это возможно (не всегда возможно, но часто это так) -