当前位置: 首页 > 面试题库 >

检查谁在MS SQL Server上的表中执行了插入

黄飞翮
2023-03-14
问题内容

我想检查哪个用户在MS SQL Server
2008的特定表中执行了插入操作。我知道一些日志记录信息已存储,但是我不知道如何访问它。如果能提供有关我的问题的具体信息,以及如果我也需要其他信息的话,我将不胜感激。

谢谢!


问题答案:

您是在谈论从事务日志中检索此消息吗?

这是不理想的,因为您不能保证相关行仍将在活动日志中可用,并且查询效率较低,但是可以通过以下操作(返回USER_NAME()而不是可能有用的方式SUSER_NAME())进行。

更改dbo.X为您的实际表名。

DECLARE @allocation_unit_ids TABLE (
  allocation_unit_id BIGINT PRIMARY KEY )

INSERT INTO @allocation_unit_ids
SELECT allocation_unit_id
FROM   sys.allocation_units au
       JOIN sys.partitions p
         ON au.container_id = CASE
                                WHEN au.type IN ( 1, 3 ) THEN p.hobt_id
                                WHEN au.type = 2 THEN p.partition_id
                              END
WHERE  p.object_id = OBJECT_ID('dbo.X');

WITH L1
     AS (SELECT [Transaction ID],
                [Begin Time],
                [End Time],
                [Transaction SID],
                CASE
                  WHEN Operation = 'LOP_INSERT_ROWS'
                       AND AllocUnitId IN (SELECT allocation_unit_id
                                           FROM   @allocation_unit_ids) THEN 1
                END AS I
         FROM   sys.fn_dblog(NULL, NULL) l),
     L2([Transaction ID], TransactionBegin, TransactionEnd, sid)
     AS (SELECT [Transaction ID],
                MAX([Begin Time]),
                MAX([End Time]),
                MAX([Transaction SID])
         FROM   L1
         GROUP  BY [Transaction ID]
         HAVING 1 = MAX(I))
SELECT TransactionBegin,
       TransactionEnd,
       p.name AS PrincipalName
FROM   L2
       JOIN sys.database_principals p
         ON p.sid = L2.sid


 类似资料:
  • 问题内容: 我有一个动态查询,执行时会给出带有很多列的结果。我想将来自此动态查询的结果插入到临时表中。我这样做是因为我想对临时表执行一些过滤并获得所需的结果。 在该线程中先创建一个临时表,然后使用插入数据。 由于列的列表太长,我想避免此步骤,而且我不知道字段的数据类型。 错误信息 关键字“ exec”附近的语法不正确。 这该怎么做 ?是否可以通过这种方式完成?如果不是,请指定其他替代方法以将执行动

  • 我在eclipse工作区中有一个java项目,它将用数据创建excel表。我将整个项目导出为一个可执行的jar文件,通过双击jar文件,可以在JVM的帮助下运行。双击JAR后,我可以看到在windows任务管理器的Processes选项卡下创建了一个带有javaw.exe的新进程。问题是,如何知道我的java代码是否运行并创建了带有数据的excel表。 我知道,我可以提取jar内容并检查excel

  • 我为每个日期创建了多个表来存储每个日期的一些信息。例如历史3108、历史0109..所有这些表共享相同的模式。有时候,我需要查询多个表,获取记录的行数和计数。在oracle和SQL Server中,最快的方法是什么? 目前我正在这样做。。。 当我需要多个表的计数时:为每个表选择计数(*),然后添加 当我需要多个表的记录时:从表1中选择*,从表2中选择*(基本上为每个表选择*) 如果我们在一个事务中

  • 问题内容: 我有一个有4000万行且没有主键的表。在添加主键之前,我想检查表中是否有重复的条目。当我说重复条目时,我不仅意味着在特定列上重复。我的意思是整行重复。 在上一个问题中,我被告知可以执行查询以确定重复项。我该怎么做? 我正在运行PostgreSQL 8.1.22。(通过运行获得此信息)。 问题答案: 要了解是否 任何 完整存在重复(在所有列相同),这可能是最快的方法: 这是一种非常方便的

  • 我正在尝试Go语言和gorm,以便在我当前的项目中创建一个新功能。 我在MySQL中有以下数据库结构。 UserMaster表位于层次结构的顶部,它的主键列被许多其他表引用,它们自己将其用作主列。UserLogin表就是这样的表之一。这不是完美的数据库设计,但这是我将要处理的数据库结构,并且不可能更改该结构。 以下是我为go中的UserMaster和UserLogin创建的模型类。 我希望通过go