いくつかの値がテーブルに挿入された後にテーブルを更新するストアドプロシージャをSQLServer2008で作成しようとしています。
私のストアドプロシージャはDMVから値を取得し、それらをテーブルに格納します。クエリの挿入後の同じ手順で、同じテーブルの更新クエリを作成しました。
挿入結果は正常に入力されますが、更新の結果は失われます。
しかし、ストアドプロシージャに挿入するだけで、更新クエリを手動で実行しようとすると、すべて問題ありません。
なぜこのように起こっているのですか?
いくつかの値がテーブルに挿入された後にテーブルを更新するストアドプロシージャをSQLServer2008で作成しようとしています。
私のストアドプロシージャは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
最良のアプローチはトリガーを使用することです。トリガーのサンプル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