作为dbowner在桌面上获得最新更新

时间:2011-05-06 23:41:22

标签: sql tsql sql-server-2008 smo

我需要为表格获取上次更新的时间戳。此操作由dbowner执行,该dbowner对所有sprocs具有GRANT EXEC权限。任何想法如何实现这一目标?这是我试过的。

我尝试使用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;
}

还尝试创建一个新的sproc,但是当我调用它时,我得到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)=@TableName AND database_id = DB_ID(DB_NAME())
END
GO

1 个答案:

答案 0 :(得分:2)

来自sys.dm_db_index_usage_stats的帮助主题:

  

需要VIEW SERVER STATE权限。

如果您查看server permissions VIEW SERVER STATEALTER SERVER STATE隐含CONTROL SERVER隐含{{1}}。系统管理员具有所需的权限,而数据库管理员则没有。

最佳解决方案是签署程序,然后通过签名授予所需的权限,请参阅Signing an activated procedure以获取示例。