2012-02-14 90 views

回答

3

您將需要一個觸發器和一個表來存儲結果。非常快速的原型:

CREATE TRIGGER dbo.trigger_name 
ON dbo.table_name 
FOR DELETE 
AS 
    INSERT INTO dbo.LogTable(RowID, UserName) 
     SELECT PK_Column, SUSER_SNAME() 
     FROM deleted; 
GO 

需要注意的是,除非每個接入用戶驗證到SQL Server作爲自己,你可能需要使用主機名或一些其他財產,以確定他們(如果他們都連接爲相同的SQL用戶,有是小SQL Server可以做,以確定他們真的是誰)。

+0

由於某些原因,當我使用HOSTNAME()時,它爲異地用戶返回多個用戶的相同HOSTNAME()。我認爲這是一個網絡問題。 SUSERNAME()返回BOGUS。我無法修改Access應用程序,因此我無法對它們進行每次驗證。 – Bruno 2012-02-14 16:56:13

+1

是的SQL Server無法到達遠程機器來查看主機名稱,它只能看到任何主機名稱傳遞該請求到SQL Server。如果他們使用SQL身份驗證(我認爲這就是'BOGUS'),你將很難獲得Windows用戶名。我不確定Profiler如何顯示實際的用戶名 - 您確定它對所有用戶都是準確的嗎? Profiler運行在哪裏,與Access應用程序運行在同一臺機器上? – 2012-02-14 17:06:59

+0

Profiler從我的機器上運行,SQL Server在服務器上運行,Access應用程序從不同的網絡共享中運行。 – Bruno 2012-02-14 18:18:56