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,这样我就可以提取某个用户在某个日期进行的基本上次修改 我尝试过使用交叉应用程序,但在30秒后查询仍在运行时,我就停止了这种想法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,这样我就可以提取某个用户在某个日
在某些情况下,可能没有“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并包含所有索引。