Мне нужно сравнить две строки друг с другом, а затем написать поля, которые были заменены на таблицу.Нужно сравнить разницу в две строки?
Мой стол:
CREATE TABLE dbo.tUserChanges
(
cID int IDENTITY (1,1),
cChangeDate DateTime,
cValueChanged varchar(30),
cPreviousValue bit,
cCurrentValue bit
)
В моей программе C# таблица пользователь должен обновляться при внесении изменений пользователям.
Это делается с помощью хранимой процедуры:
CREATE PROCEDURE [dbo].[UUser]
(
@User as varchar(15),
@UCode AS int,
@UName AS varchar(30),
@UID AS varchar(10),
@UPassword AS varchar(15),
@UPMaintenance as bit,
@UClient as bit,
@UFinancial as bit,
@UViewReceiptImage bit,
@UViewPayrollData bit
)
AS
BEGIN
UPDATE tUsers
SET
UName = @UName,
UID = @UID,
UPassword = @UPassword, UPMaintenance = @UPMaintenance,
UClient = @UClient,
UFinancial = @UFinancial,
UViewReceiptImage = @UViewReceiptImage,
UViewPayrollData = @UViewPayrollData
WHERE UCode = @UCode
END
Существует несколько значений в таблице TUser, но ради сохранения ее рода я удалил некоторые из значений.
Так что мне нужно сделать, это создать временную таблицу в befor, чтобы обновить таблицу tUsers, чтобы я мог сравнить две строки после того, как обновление было выполнено, а затем правильно изменения, которые произошли в новой таблице.
Я попытался это, но я знаю, что есть лучший способ, и это также не дает желаемых результатов:
declare @i int
set @i = 0
declare @ColumnCount int
set @ColumnCount = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @UID)
declare @ColumnName varchar(30)
set @ColumnName = (select column_name from information_schema.columns where table_name = 'tUsers' and ordinal_position = 14)
select UActivateLoan from tusers
while (@ColumnCount < @i)
Begin
if((select @ColumnName from tUsers where UID = @UID)
<> (select @ColumnName from #myTemp where UID = @UID))
Begin
Insert into tUserChanges
Values(GETDATE(),(select column_name from information_schema.columns where table_name = 'tUsers' and ordinal_position = 14),
(select(select column_name from information_schema.columns where table_name = 'tUsers' and ordinal_position = 14) from #myTemp where UID = @UID),
(select(select column_name from information_schema.columns where table_name = 'tUsers' and ordinal_position = 14) from tUsers where UID = @UID))
END
set @i = @i + 1
End
Я не уверен, если мне нужно будет использовать курсор здесь или то, что я могу сделать, чтобы получить результат? Любая помощь будет оценена по достоинству.
SQL не магически интерпретирует строки или переменные в качестве имен. Если у вас есть 'select @ColumnName из tUsers, где UID = @ UID', то вы говорите:« выберите значение переменной @ @ ColumnName », а не« получите столбец с именем «@ ColumnName» из таблицы « –
Да, я знаю это, но я разместил это как пример, так как я не уверен, как это сделать. – user1171437