J'ai un travail qui effectue plusieurs vérifications de validation sur des lignes dans plusieurs tables d'une base de données. Si la vérification échoue, elle enregistre l'échec dans une table. Les informations consignées incluent le nom de la table, une valeur uniqueidentifier de la ligne ayant échoué, la vérification de l'échec et le travail en cours d'exécution. Voici la définition de table simplifiée du journalFonction TSQL pour renvoyer le nombre de lignes dans un jeu de résultats à partir d'une fonction
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)
Je voudrais écrire une fonction qui renvoie le nombre de lignes ont échoué donné une certaine table et ID de tâche (à savoir fnGetNumberOfFailedRows (@JobID, @TableName)). J'ai essayé quelque chose de semblable au suivant:
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 [email protected] And [email protected]
Group By fkJobID, TableName, TableUniqueIdentifier
SET @NumFailedRows = @@ROWCOUNT
RETURN @NumFailedRows
END
Mais bien sûr, vous ne pouvez pas avoir cette instruction Select dans une fonction. Existe-t-il un moyen de faire ce que je veux dans une fonction ou est-ce que je dois faire la route de la procédure stockée?
Merci cela a fonctionné. J'ai essayé ceci avant sans l'alias et il a eu une erreur de syntaxe. Savez-vous pourquoi le a est nécessaire à la fin? –
Content de pouvoir aider. Je ne peux pas dire exactement pourquoi il y a un besoin pour un alias, sauf pour dire que tous les champs doivent être capables d'être pleinement qualifiés (la plupart du temps, le moteur gère cela pour vous), et sans nom pour le dérivé table/resultset, vous n'avez pas de nom pour la source des champs référencés. Je devine juste, cependant. –