2011-05-06 51 views
2

我需要獲取表格的最後更新時間戳記。此操作由dbowner執行,dbowner對所有sprocs擁有GRANT EXEC權限。任何想法如何做到這一點?這是我試過的。以表格的形式獲取最後更新的表格作爲dbowner

我嘗試使用SMO獲取此信息,但由於缺少權限,它會返回空表對象。


using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    ServerConnection serverConnection = new ServerConnection(connection); 
    Server server = new Server(serverConnection); 
    Database database = server.Databases["MyDb"]; 
    Table table = database.Tables["MyTable"]; // here table is null for dbowner user, but a valid object for a super user 
    DateTime lastModified = table.DateLastModified; 
} 

還試圖創建一個新的存儲過程,但是當我把它稱爲我得到The user does not have permission to perform this action.


CREATE PROCEDURE getTableLastModifiedDate 
    (
     @TableName nvarchar(max) 
    ) 
AS 
BEGIN 
    SELECT last_user_update FROM sys.dm_db_index_usage_stats 
    WHERE OBJECT_NAME(OBJECT_ID)[email protected] AND database_id = DB_ID(DB_NAME()) 
END 
GO 

回答

2

從幫助主題sys.dm_db_index_usage_stats

需要查看服務器狀態的權限。

如果你看一下server permissionsVIEW SERVER STATEALTER SERVER STATE又被CONTROL SERVER隱含的暗示。系統管理員擁有所需的權限,數據庫管理員則不具備。

最好的解決方案是簽署該程序,然後通過簽名授予所需的權限,例如參見Signing an activated procedure

+1

謝謝你的回答。在我看來,你提出的解決方案對於「表最後修改時間」這個簡單問題來說太複雜了。是否有更簡單的解決方案來提取這部分數據? – kateroh 2011-05-10 00:25:16