SQL Server批量更新更改列值

SQL Server批量更新更改列值,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我最近在所有行上运行了一个更新查询,大约25k。。。 我的更新查询是一个简单的更新,如下所示: Update om_Challans set LockType = 'Locked', LockActionDate = getdate(), LockActionBy = 'Query' 我没有更新任何其他专栏 我还有一个触发器,它将历史记录保存在“om_challans_history”表中,因此任何更改的行都会移动到历史记录表中。 我最近注意到,查询将大约26行中的数据自动更改为零。以下是我的

我最近在所有行上运行了一个更新查询,大约25k。。。 我的更新查询是一个简单的更新,如下所示:

Update om_Challans set LockType = 'Locked', LockActionDate = getdate(), LockActionBy = 'Query'
我没有更新任何其他专栏

我还有一个触发器,它将历史记录保存在“om_challans_history”表中,因此任何更改的行都会移动到历史记录表中。 我最近注意到,查询将大约26行中的数据自动更改为零。以下是我的意思示例:

任何关于如何实现这一点的想法都将不胜感激

更新

这是om_Challans表上的触发器

ALTER TRIGGER [dbo].[T_CreateUpdateHistory1]
on [dbo].[OM_Challans]
after update
as
    set nocount on

if  ((select [Status] from deleted) LIKE '%FieldData%')
BEGIN
    return
END


insert into om_challans_history (
[Rec_Ltr1] ,
[challan_id] ,
[LockType],
[LockActionDate],
[LockActionBy],
[SamplesSent]
) /* Columns in OM_Challans Table */

select   
i.Rec_Ltr1  ,
i.challan_id  ,
i.LockType,
i.LockActionDate,
i.LockActionBy,
i.SamplesSent /* Old Values of this table */
from
    OM_Challans a
       inner join
    deleted i
        on
            a.sno = i.sno /* Primary Key columns from table A */

由于您的触发器当前因多行更新而中断,因此我不相信回答此问题所需的所有内容当前都在我们面前,如果选择[状态]from deleted(如“%FieldData%”)在deleted包含多行时将导致错误-这是一个遗憾,因为触发器的其余部分似乎是正确构建的,我的观点是,您向我们展示的触发器将导致错误,并强制语句回滚任何影响多行的更新。那么,当您更新25k行时,您为什么声称该触发器已就位并起作用?如果您不想审核具有[状态]的记录,如“%FieldData%”,请将此条件放入insert into select中,而不是在触发器被禁用时执行的另一次更新中?事实上,当触发器被禁用时,不需要执行另一次更新-它可能正是您在历史记录表中看到的条目。我们现在知道,这些条目不是由批量更新创建的,因为触发器已禁用。如果历史记录表中没有足够的信息来确定这些条目是如何/何时创建的,那么,这是另一个问题。我看不出这个问题能从你们给我们的答案中得到任何答案,现在大部分都是多余的