У меня есть задание, которое выполняет несколько проверок строк в нескольких таблицах базы данных. Если проверка не удалась, она регистрирует ошибку в таблице, которая. Регистрируемая информация включает в себя имя таблицы, значение уникального идентификатора строки, в которой произошел сбой, проверку ошибки и задание, которое выполнялось в данный момент. Вот упрощенное определение таблицы журнала
CREATE TABLE [tblSY_ValidationFieldFailures](
[pkValidationFieldFailure] [int] IDENTITY(1,1) NOT NULL,
[fkJobID] [int] NOT NULL,
[fkValidationFieldFailureType] [int] NOT NULL,
[TableName] nvarchar(128),
[TableUniqueIdentifier] [nvarchar](100) NULL)
Я хотел бы написать функцию, которая возвращает количество неудачных строк с учетом определенной таблицы и идентификатора задания (например, fnGetNumberOfFailedRows(@JobID, @TableName)). Я пробовал что-то похожее на следующее:
CREATE FUNCTION fnGetNumberOfRowsThatFailedValidationCheck
(
@pkJobID int,
@TableName nvarchar(128)
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @NumFailedRows int
Select fkJobID,
TableUniqueIdentifier,
TableName
From tblSY_ValidationFieldFailures
Where fkJobID=@pkJobID And TableName=@TableName
Group By fkJobID, TableName, TableUniqueIdentifier
SET @NumFailedRows = @@ROWCOUNT
RETURN @NumFailedRows
END
Но, конечно, вы не можете иметь этот оператор Select внутри функции. Есть ли способ сделать то, что я хочу, внутри функции или мне нужно использовать маршрут хранимой процедуры?