Правила устарели, что вместо этого (TSQL)? - PullRequest
4 голосов

Правила (Transact-SQL) [1] можно использовать повторно, что позволило преодолеть недостаток неиспользуемых проверочных ограничений.

И теперь я прочитал [1], что:

  • "Эта функция будет удалена в будущей версии Microsoft SQL Server. Избегайте использования этой функции в новых разработках и планируйтечтобы изменить приложения, которые в настоящее время используют эту функцию. Мы рекомендуем вместо этого использовать проверочные ограничения. Проверочные ограничения создаются с помощью ключевого слова CHECK CREATE TABLE или ALTER TABLE "

Итак, что вместо правили почему они устарели?


==== Обновление:
AlexKuznetsov, ограничения проверки уровня таблицы ужасно медленные?
Или проверка уровня таблицыограничения с использованием функций являются медленными по сравнению с проверочными ограничениями на уровне столбцов и т. д.правила как их эквиваленты (так как правила только на уровне столбцов)?

Другими словами, равны ли проверочные ограничения и правила на уровне столбца (неявно являющиеся только уровнем столбца)?
Тогда я вижу только удаление функции повторного использования.Использование одноразовых ограничений на уровне таблиц присутствовало ранее.

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

[1]
Электронная документация по MS SQL Server 2008 R2.СОЗДАЙТЕ ПРАВИЛО (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188064.aspx

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Если вас беспокоит, что вы хотите написать «код» для ограничения один раз и повторно использовать его для нескольких столбцов, я предлагаю вам сделать следующее:

Создайте функцию с вашими правилами ограничения:

CREATE FUNCTION schema.PositiveInteger(INT val)
RETURNS INT AS
BEGIN
    IF (val > 0) RETURN 1
    ELSE RETURN 0
END

Добавьте эту функцию в качестве ограничения к столбцу:

ALTER TABLE tbl ADD CONSTRAINT chkMyRules CHECK (schema.PositiveInteger(tbl.IntColumn) = 1);

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

CREATE FUNCTION ... (INT val, DATETIME date) RETURNS INT AS ......
ALTER TABLE tbl ADD CONSTRAINT chkMultipleCols CHECK (func(col1, col2) = 1);

Наслаждайтесь!

3 голосов
/ 01 октября 2010

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

Если ограничение проверки не сокращаетсявы также можете посмотреть на использование триггера для более сложной логики.

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