SQL хранимая процедура - объедините таблицу программного журнала с новой таблицей задач для создания назначений - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в присоединениях и чувствую, что это может лучше всего удовлетворить эту потребность. У меня есть журнал программного обеспечения, записанный в таблицу SQL, который я не могу изменить. У меня также есть таблица задач, которую я создал, чтобы я мог назначить администратору ошибку и чтобы он мог ее исследовать.

Мне нужен способ вернуть уникальные / отчетливые ошибки, поэтому я изначально создал хранимую процедуру для возврата только отчетливых ошибок (с диапазоном дат) из-за количества распространенных ошибок и узкого охвата расследования:

CREATE PROCEDURE [dbo].[GetUniqueValueNames] 
    @StartDate datetime = NULL, 
    @EndDate datetime = NULL
AS
    SELECT 
        ERRORMSG, MAX(ERRORDATE) AS MessageLogDate
    FROM 
        Server.ErrorLog 
    WHERE
        MessageLogDate BETWEEN Coalesce(@StartDate, MessageLogDate) AND Coalesce(@EndDate, MessageLogDate)
    GROUP BY
        ERRORMSG

Мое намерение: я хотел бы объединить эти две таблицы, сохранив функциональность отдельного сообщения об ошибке и быть в состоянии определить, назначена ли для записи журнала задача.

I угадал, что мне нужно присоединиться к сообщению об ошибке. Я копирую некоторые значения в задачу, и ошибка (отдельная) - вот что привело к этой ситуации.

TaskTable (Database A)  LA.TaskTbl                          
taskID  TaskDescription TaskProcess **ErrorMsg**    Status  ErrorClassification Priority    SafetoRestart   AssignedUser    taskDate


Log Table (Database B)  Server.ErrorLog                             
ID  **ERRORMSG** ERRORDATE  ERRORITEMNAME   FOLIO   OBJECTID    PROCESSNAME PROCID  PROCINSTID  PROCSETID

Дайте мне знать, если что-нибудь еще понадобится.

Спасибо.

1 Ответ

0 голосов
/ 01 февраля 2020

Вместо хранимой процедуры вы захотите использовать табличную функцию . Синтаксис немного варьируется между СУБД (это помогает пометить запросы с используемой СУБД), но преимущество табличных функций заключается в том, что они могут использоваться в запросах, таких как обычные таблицы:

SELECT log.*, task.* -- or whatever you are interested in
FROM LogTable log
JOIN GetUniqueValueNames(...) errors ON errors.ErrorMsg = log.ErrorMsg
LEFT OUTER JOIN TaskTable task ON task.ErrorMsg = log.ErrorMsg

или немного менее эффективен за счет более удобочитаемой информации:

SELECT log.*, task.* -- or whatever you are interested in
FROM LogTable log
LEFT OUTER JOIN TaskTable task ON task.ErrorMsg = log.ErrorMsg
WHERE log.ErrorMsg IN (SELECT ErrorMsg from GetUniqueValueNames(...))

Преимущество первого запроса состоит в том, что вы также можете выбрать MessageLogDate.

...