Fonction de champ SQL Server 2008 – Renvoie 'ok' ou 'non' en fonction de la relation entre deux autres champs

Je suis assez nouveau pour les fonctionnalités de database plus avancées, telles que les fonctions, mais j'étais curieux de savoir comment le faire en MSSQL (ou si c'est possible même):

Si j'ai une table et la structure est quelque chose comme ceci:

 t_test

 USR_VALUE MULTIPLIER TOLERANCE VALUE_OK
 100 .8 85 OK           
 100 .9 85 NON

Comment j'obtiendrais VALUE_OK pour se mettre automatiquement à jour chaque fois que la ligne est mise à jour en fonction des USR_VALUE, MULTIPLIER et TOLERANCE (IE simple calcul: (t_test.USR_VALUE * t_test.MULTIPLIER >= TOLERENCE)? "OK" : "NO" )

Vous voulez l'expression:

 CASE WHEN USR_VALUE * MULTIPLIER >= TOLERANCE THEN 'OK' ELSE 'NO' END 

Notez que vous pouvez append ceci à la table en tant que colonne calculée en utilisant …

 ALTER TABLE yourtable ADD VALUE_OK AS CASE WHEN USR_VALUE * MULTIPLIER >= TOLERANCE THEN 'OK' ELSE 'NO' END 

… mais méfiez-vous d'utiliser cette valeur dans une clause WHERE où le coût de l'exécution du calcul et le manque d'index peuvent être prohibitifs. Recherchez des colonnes calculées indexées si vous souhaitez passer au niveau suivant.

J'ai effectivement utilisé le code de Will et je l'ai modifié un peu pour qu'il ressemble à Will, mais je peux maintenant l'utiliser dans d'autres champs / tables (créer une fonction):

 CREATE FUNCTION [dbo].[is_ok](@Number1 float, @Number2 float, @Tolerence float) RETURNS varchar(5) AS BEGIN DECLARE @RETURN varchar(5), @RESULT float; SET @RESULT = @Number1 * @Number2; IF @Number1 is NULL OR @Number2 is NULL SET @RETURN = ''; ELSE IF @RESULT >= @Tolerence SET @RETURN = 'OK'; ELSE SET @RETURN = 'NO'; RETURN @RETURN; END; 

puis ajouté la nouvelle colonne:

 ALTER TABLE t_test ADD [value_ok] AS ([dbo].[is_ok]([user_value],[multiplier],[tolerance])); 

(Cela devrait fonctionner, mais je l'ai copié à partir de la database de test que j'utilisais et j'ai modifié les noms de champs pour correspondre à la table d'exemple de la question)