fa_karoon
سه شنبه 25 تیر 1392, 22:37 عصر
سلام دوستان فرض کنید جدولی دارم به اسم Test که وقتی متغیر @TestID برابر صفر است عمل Insert و وقتی غیر ازصفر است عمل Update را انجام می دهد حالا یک جدول گذاشته ام به نام رکورد که بعد از عمل درج و آپدیت
در آن جدول درج می شود که چه کاری توسط چه کسی و در چه زمانی انجام شده
ALTER PROCEDURE [dbo].[SaveTest] (
@RecordUsersID As bigint,
@RecordDate As nvarchar(255),
@RecordTime As nvarchar(255),
@TestID AS bigint,
@RegisterID AS bigint,
@EmployeeID AS bigint,
@State AS bigint
)AS
IF (@TestID = 0)
BEGIN
INSERT INTO Test
(RegisterID , EmployeeID, State)
VALUES
(@RegisterID ,@EmployeeID,@State)
DECLARE @RowID As bigint
Select @RowID=@@Identity
EXEC dbo.SaveRecord @RecordUsersID,1,@RowID,Test,null,null,null,@Recor dDate,@RecordTime
Select @RowID
END
ELSE
BEGIN
DECLARE @PrevValue as nvarchar(255)
SET @PrevValue = (SELECT RegisterID FROM Test Where TestID = @TestID)
IF(@PrevValue <> @RegisterID) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,RegisterID,@PrevValu e,@RegisterID,@RecordDate,@RecordTime
SET @PrevValue = (SELECT EmployeeID FROM Test Where TestID = @TestID)
IF(@PrevValue <> @EmployeeID) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,EmployeeID,@PrevValu e,@EmployeeID,@RecordDate,@RecordTime
SET @PrevValue = (SELECT State FROM Test Where TestID = @TestID)
IF(@PrevValue <> @State) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,State,@PrevValue,@St ate,@RecordDate,@RecordTime
UPDATE Test SET
RegisterID=@RegisterID
,EmployeeID=@EmployeeID
,State=@State
WHERE TestID = @TestID
SELECT TestID FROM Test WHERE TestID = @TestID
END
حالا سوال من این است آیا روشی که برای Logگیری هنگام آپدیت استفاده کرده ام درست است؟ آیا تعداد Select های زیاد باعث کندی نمی شود و اشکال ندارد؟ لطفا راهنمایی کنید
در آن جدول درج می شود که چه کاری توسط چه کسی و در چه زمانی انجام شده
ALTER PROCEDURE [dbo].[SaveTest] (
@RecordUsersID As bigint,
@RecordDate As nvarchar(255),
@RecordTime As nvarchar(255),
@TestID AS bigint,
@RegisterID AS bigint,
@EmployeeID AS bigint,
@State AS bigint
)AS
IF (@TestID = 0)
BEGIN
INSERT INTO Test
(RegisterID , EmployeeID, State)
VALUES
(@RegisterID ,@EmployeeID,@State)
DECLARE @RowID As bigint
Select @RowID=@@Identity
EXEC dbo.SaveRecord @RecordUsersID,1,@RowID,Test,null,null,null,@Recor dDate,@RecordTime
Select @RowID
END
ELSE
BEGIN
DECLARE @PrevValue as nvarchar(255)
SET @PrevValue = (SELECT RegisterID FROM Test Where TestID = @TestID)
IF(@PrevValue <> @RegisterID) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,RegisterID,@PrevValu e,@RegisterID,@RecordDate,@RecordTime
SET @PrevValue = (SELECT EmployeeID FROM Test Where TestID = @TestID)
IF(@PrevValue <> @EmployeeID) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,EmployeeID,@PrevValu e,@EmployeeID,@RecordDate,@RecordTime
SET @PrevValue = (SELECT State FROM Test Where TestID = @TestID)
IF(@PrevValue <> @State) EXEC dbo.SaveRecord @RecordUsersID,2,@TestID,Test,State,@PrevValue,@St ate,@RecordDate,@RecordTime
UPDATE Test SET
RegisterID=@RegisterID
,EmployeeID=@EmployeeID
,State=@State
WHERE TestID = @TestID
SELECT TestID FROM Test WHERE TestID = @TestID
END
حالا سوال من این است آیا روشی که برای Logگیری هنگام آپدیت استفاده کرده ام درست است؟ آیا تعداد Select های زیاد باعث کندی نمی شود و اشکال ندارد؟ لطفا راهنمایی کنید