Sql server 链接到审核表

Sql server 链接到审核表,sql-server,Sql Server,所以我有dbo.Table1,它包含ID、ColA、ColB、ColC 我还有audit.Table1,它包含audited、AuditDate、AuditUserID、AuditType、ID、ColA、ColB、ColC AuditType为I、U或D(用于插入、更新或删除) 我要查找的结果是一个查询,我根据where子句给出了表1中的每条记录,但也给出了从audit中提取的上次修改的信息。表1表(ID的最新“U”值)主要是我想要日期和AuditUserID,这样我就可以提取某个用户在某个日

所以我有dbo.Table1,它包含ID、ColA、ColB、ColC

我还有audit.Table1,它包含audited、AuditDate、AuditUserID、AuditType、ID、ColA、ColB、ColC

AuditType为I、U或D(用于插入、更新或删除)

我要查找的结果是一个查询,我根据where子句给出了表1中的每条记录,但也给出了从audit中提取的上次修改的信息。表1表(ID的最新“U”值)主要是我想要日期和AuditUserID,这样我就可以提取某个用户在某个日期进行的基本上次修改

我尝试过使用交叉应用程序,但在30秒后查询仍在运行时,我就停止了这种想法


在某些情况下,可能没有“U”记录(该记录只是创建的,没有进行任何更改)。

这里不太清楚您到底在做什么。但我很确定你可以用这些东西

create table Table1
(
    ID int identity
    , ColA varchar(10)
    , ColB varchar(10)
    , ColC varchar(10)
)

insert Table1
select 'Col1', 'Col2', 'Col3'

insert Table1
select 'This', 'has', 'no update'

create table AuditTable1
(
    AuditID int identity
    , AuditDate datetime
    , AuditUserID int
    , AuditType char(1)
    , ID int
    , ColA varchar(10)
    , ColB varchar(10)
    , ColC varchar(10)
)

insert AuditTable1
select getdate()
    , 9 --just some number
    , 'U'
    , 1
    , 'Col1'
    , 'Col2'
    , 'Col3'

select t.*
    , x.AuditID
    , x.AuditDate
    , x.AuditUserID
from Table1 t
outer apply
(
    select top 1 AuditID
        , AuditDate
        , AuditUserID
    from AuditTable1 at1
    where at1.ID = t.ID
    order by at1.AuditDate desc
) x

因此,在进一步研究之后,我能够通过创建一个过渡的左派加入,让我在最后一次接触的作品中试镜,从而使一切顺利进行。。。如果AuditUserID在我的左连接中为null,那么我知道它自创建以来就没有被修改过。所以我的最后一个问题基本上是

SELECT [fields wanted from Courses table],
IIF(ISNULL(ac.AuditUserID,0) = 0, [make created by info], [make modified info]) as LastModInfo
FROM dbo.Courses c
    LEFT JOIN (select MAX(AuditID), CourseID from audit.Courses group by CourseID) mid
        ON mid.CourseID = c.CourseID
    LEFT JOIN audit.Course ac on ac.AuditID = mid.AuditID AND ac.AuditType = 'U'

感谢@seanlange的尝试

您能发布表定义(创建表语句)、样本数据作为insert语句和样本数据的所需输出吗?我的问题是应用需要花费很长时间(我在30秒后手动停止了它)。然后我们可能需要查看执行计划。很可能一些索引在这里会有所帮助。你能得到一份执行计划并发布吗?(是的,我知道创建它可能需要一段时间)或者为您的表发布ddl并包含所有索引。