Ссылка на таблицу аудита - PullRequest
0 голосов
/ 11 июня 2019

Итак, у меня есть dbo.Table1, который содержит ID, ColA, ColB, ColC.

У меня также есть Audit.Table1, который содержит AuditID, AuditDate, AuditUserID, AuditType, ID, ColA, ColB, ColC.

AuditType - это I, U или D (для вставки, обновления или удаления).

Результаты, которые я ищу, представляют собой запрос, который я выдаю каждой записи в таблице Table1 на основечто бы там ни было, но также дает мне информацию о последних изменениях, извлеченную из таблицы aud.Table1 (самое последнее значение «U» для идентификатора), в основном, я хочу указать дату и AuditUserID, чтобы я мог получить базовое значение «Последний измененный» в такую ​​и такую ​​датупользователем so & so.

Я пытался использовать Cross Apply, но остановился на этой мысли, когда мой запрос все еще выполнялся через 30 секунд.

Могут быть случаи, когда нетЗапись «U» (запись была создана только, без изменений).

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Так что после дальнейшей работы над этим я смог заставить все работать, создав левое переходное соединение, которое просто дало мне номер AuditID # последней нажатой записи ... и если 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 за попытку

0 голосов
/ 12 июня 2019

Не совсем понятно, что у вас здесь происходит. Но я уверен, что вы можете использовать что-то подобное.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...