一部の列を含む表があります。アーカイブの目的のために、私は通常同じように見える2番目のテーブルを作成しますが、私はさらにPrimary Key
とUsername/DateTime
を追加します。すべての編集後、私は多かれ少なかれ、そのように見えるプロシージャを呼び出す:SQL Serverのすべての列を入力せずに行の内容を別の表にコピーする方法
CREATE PROCEDURE [dbo].[sto_archiwizujPodmiot]
@varPodmiotID INT, @varUzytkownik NVARCHAR(50), @varUzytkownikData DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO [dbo].[PodmiotyHistoria]
([PodmiotID]
,[PodmiotOsobaNazwisko]
,[PodmiotOsobaImie]
,[PodmiotUzytkownik]
,[PodmiotUzytkownikData])
SELECT [PodmiotID]
,[PodmiotOsobaNazwisko]
,[PodmiotOsobaImie]
,@varUzytkownik
,@varUzytkownikData
FROM [dbo].[Podmioty]
WHERE [PodmiotID] = @varPodmiotID
END
私は私がアーカイブを持っている必要があり、すべて単一のテーブルのような手順を作成します。たとえば、更新が行われる前に誰かがいくつかのフィールドを編集しようとしている場合、私はこのプロシージャを呼び出します。問題は、1つのテーブルごとにこれを作成することです。 TableName
、ArchiveTableName
、Username
、DateTime
などのパラメータを指定するだけで、すべての単一のテーブルに対して呼び出すことができる、またはそれは私が毎回やるべきことですか?もっと一般化されたプロシージャを作成する方法はありますか?
C#からトリガーに値を渡すことはできますか? UsernameとDateTimeはC#プログラムから来ています。 – MadBoy
@MadBoy - 追加のパラメータをトリガに供給することはできません。現在の 'DateTime'では、SQLの' GETDATE() '関数を使用することができます。 – Oded
次に、プログラムからユーザー名が必要なので、ストアドプロシージャを使用し続ける必要があります。プログラムは誰が変更を行ったかを知る必要があります。 – MadBoy