【问题标题】:Updating a Table after some values are inserted into it in SQL Server 2008在 SQL Server 2008 中插入一些值后更新表
【发布时间】:2013-03-13 10:46:59
【问题描述】:

我正在尝试在 SQL Server 2008 中编写一个存储过程,它会在将一些值插入到表中后更新表。

我的存储过程从 DMV 获取值并将它们存储在表中。在插入查询后的相同过程中,我为同一张表编写了更新查询。

插入结果填充良好,但更新结果丢失。

但是当我尝试只在存储过程中插入并手动执行更新查询时,一切都很好。

为什么会这样?

【问题讨论】:

  • 你能提供你做过的示例代码吗..
  • 在这种情况下,存储过程不是最好的方法,这里应该使用“触发器”。
  • @YaqubAhmad - 不,我只需要一个存储过程。我也知道使用触发器,但我需要从 DMV 进行一些计算,所以我使用的是 SP。

标签: sql sql-server-2008 stored-procedures insert-update


【解决方案1】:

这应该没有问题。

下面的代码按预期工作。

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

【讨论】:

    【解决方案2】:

    最好的方法是使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多