0

我的同事正在制作ASP.NET Web Forms收集数据的应用程序。我正在管理SQL Server它的数据库。基于数据库,他使用Linq to SQL. 他希望我在 Osoby 制作记录,以更改dataDodania对象的生成dataModyfikacji日期和上次更新的日期。有 PL/SQL 方面的经验,我为此做了简单的触发器。问题是当我SQL Server Management Studio 2008很好地运行 SQL 语句时触发器工作,但在应用程序中使用时 - 它们被省略,不需要进行更改。这是触发器的SQL代码:

CREATE TRIGGER [dbo].[DodanieOsoby]
   ON  [dbo].[Osoby]
   INSTEAD OF INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
        INSERT INTO Osoby(dataDodania, dataModyfikacji, loginId, rola, imie, imieDrugie, nazwisko, plec, wiek,pESEL,wyksztalcenie,opieka,ulica, nrDom, nrLokal, miejscowosc, obszar, kodPoczty, telefonKontakt, telefonStacjo, email, zatrudnienie, stanowisko, przedsiebiorstwo)
        SELECT GETDATE(), GETDATE(), loginId, rola, imie, imieDrugie, nazwisko, plec, wiek, pESEL, wyksztalcenie,opieka,ulica, nrDom, nrLokal, miejscowosc, obszar, kodPoczty, telefonKontakt, telefonStacjo, email, zatrudnienie, stanowisko, przedsiebiorstwo
        FROM inserted 
END

对于Osoby...的更新

CREATE TRIGGER [dbo].[AktualizacjaOsoby]
   ON  [dbo].[Osoby]
   AFTER UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
        UPDATE Osoby
        SET dataModyfikacji = GETDATE()
        WHERE id in 
        (SELECT DISTINCT id from Inserted)
END
4

1 回答 1

0

可能这对您有帮助(如果 dbo.Osoby 是视图)-

ALTER TRIGGER dbo.trg_IOIU_vw_WorkOut

   ON dbo.vw_WorkOut
   INSTEAD OF INSERT, UPDATE

AS BEGIN

    SET NOCOUNT ON
    SET XACT_ABORT ON

    DECLARE
          @WorkOutID BIGINT
        , @DateOut DATETIME
        , @EmployeeID INT

    DECLARE workout CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
        SELECT
              WorkOutID
            , DateOut
            , EmployeeID
        FROM INSERTED

    OPEN workout

    FETCH NEXT FROM workout INTO
          @WorkOutID
        , @DateOut
        , @EmployeeID

    WHILE @@FETCH_STATUS = 0 BEGIN

        IF NOT EXISTS(
            SELECT 1 
            FROM dbo.WorkOut 
            WHERE WorkOutID = @WorkOutID
        )
        BEGIN

            INSERT INTO dbo.WorkOut
            (
                  EmployeeID
                , DateOut
            )
            SELECT
                  @EmployeeID
                , @DateOut

            SELECT SCOPE_IDENTITY() -- if you use LINQ need return new ID to client

        END
        ELSE BEGIN

            UPDATE dbo.WorkOut
            SET 
                  EmployeeID = @EmployeeID
                , DateOut = @DateOut
            WHERE WorkOutID = @WorkOutID

        END

        FETCH NEXT FROM workout INTO
              @WorkOutID
            , @DateOut
            , @EmployeeID

    END

    CLOSE workout
    DEALLOCATE workout

END
于 2013-05-16T08:51:23.707 回答