Полевая функция SQL Server 2008 - возвращает 'ok' или 'no' в зависимости от отношения между двумя другими полями - PullRequest
2 голосов
/ 08 сентября 2010

Я довольно плохо знаком с более продвинутыми функциями базы данных, такими как функции, но мне было любопытно, как бы вы сделали это в MSSQL (или, если возможно, даже):

Если у меня есть таблица иструктура выглядит примерно так:

t_test

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

Как заставить VALUE_OK автоматически обновляться при каждом обновлении строки в зависимости от USR_VALUE, MULTIPLIER и TOLERANCE (простой расчет IE: (t_test.USR_VALUE * t_test.MULTIPLIER >= TOLERENCE)? "OK" : "NO")

Ответы [ 2 ]

4 голосов
/ 08 сентября 2010

Вы хотите выражение:

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

Обратите внимание, что вы можете добавить это в таблицу как вычисляемый столбец, используя ...

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

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

0 голосов
/ 08 сентября 2010

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

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;

затемдобавлен новый столбец:

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

(это должно сработать, но я скопировал его из используемой тестовой базы данных и изменил имена полей в соответствии с таблицей примеров вопроса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...