私のDacPacで、デプロイ後、2つのストアドプロシージャにsys.objects
、ほぼ同じミリ秒。ただし、更新したのは1つのプロシージャだけなので、そのうちの1つだけがこれを持っていると予想します。更新された他のprocは更新されたprocを呼び出しますが、直接変更しませんでした。
誰かがこの動作を見ましたか? DacPacでは、実際のコード変更がない場合でも、呼び出し元のストアドプロシージャが "変更"されると予想されますか、それともそれ以外の可能性がありますか?
私の懸念はいくつかの理由であり、主にQAの人々がこれに疑問を投げかけることに関連しており、最終的には、理由を説明できないときにprocが変更されたことを確認することはお勧めできません。
助けてくれてありがとう。
はい、予想通りです。
StoredProcA
がStoredProcB
を呼び出し、StoredProcB
が変更された場合、DacPacデプロイメントは次のようになります。
StoredProcB
への変更をデプロイしますStoredProcA
のメタデータを更新する生成されたデプロイメントスクリプトは次のようになります。
GO
PRINT N'Altering [dbo].[StoredProcB]...';
GO
ALTER PROCEDURE [dbo].[StoredProcB]
/*
your new stored proc body here
*/
GO
PRINT N'Refreshing [dbo].[StoredProcA]...';
GO
EXECUTE sp_refreshsqlmodule N'[dbo].[StoredProcA]';
StoredProcA
の変更日を更新するのは、sp_refreshsqlmodule
の呼び出しです。プロシージャは再デプロイされていませんが、基になるメタデータには含まれている可能性があります。
あなたの場合、実際には何も変わっていません。たとえば、パラメーターとして使用されたユーザー定義型をStoredProcA
に更新した場合、sp_refreshsqlmodule
全体が必要になります。この状況では必要ありませんが、SSDTには、依存するモジュールをいつ更新するかについての複雑なルールはありません。変更があった場合、モジュールをすべて更新するだけです。