ورود

View Full Version : سوال: آیا این روش کدنویسی در Stored Procedure برای انجام Log گیری صحیح است؟



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 های زیاد باعث کندی نمی شود و اشکال ندارد؟ لطفا راهنمایی کنید

in_chand_nafar
چهارشنبه 26 تیر 1392, 12:02 عصر
در اين پادكست صوتي تمامي چالش هاي مربوط به اينكار بررسي شده است
نحوه نگهداری History (تاریخچه) تغییرات Data (http://www.nikamooz.com/%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA/radionikamooz/114-%D9%86%D8%AD%D9%88%D9%87-%D9%86%DA%AF%D9%87%D8%AF%D8%A7%D8%B1%DB%8C-history-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-data.html)