我正在尝试在 SQL Server 2008 中编写一个存储过程,该过程在将某些值插入表后更新表。
我的存储过程从 DMV 获取值并将它们存储在表中。在插入查询之后的相同过程中,我为同一个表编写了更新查询。
插入结果填充得很好,但更新的结果会丢失。
但是当我尝试只在存储过程中插入并手动执行更新查询时,一切都很好。
为什么会这样?
我正在尝试在 SQL Server 2008 中编写一个存储过程,该过程在将某些值插入表后更新表。
我的存储过程从 DMV 获取值并将它们存储在表中。在插入查询之后的相同过程中,我为同一个表编写了更新查询。
插入结果填充得很好,但更新的结果会丢失。
但是当我尝试只在存储过程中插入并手动执行更新查询时,一切都很好。
为什么会这样?
这不应该有问题。
下面的代码按预期工作。
create procedure dbo.test
as
begin
create table #temp (
name varchar(100) ,
id int
)
insert #temp
select name ,
id
from master..sysobjects
update #temp
set name='ALL Same'
from #temp
select * from #temp
drop table #temp
end
go
最好的方法是使用Trigger,触发器示例AFTER UPDATE
如下:
ALTER TRIGGER [dbo].[tr_MyTriggerName]
ON [dbo].[MyTableName] AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
--if MyColumnName is updated the do..
IF UPDATE (MyColumnName)
BEGIN
UPDATE MyTableName
SET AnotherColumnInMyTable = someValue
FROM MyTableName
INNER JOIN Inserted
ON MyTableName.PrimaryKeyColumn = Inserted.PrimaryKeyColumn
END
END