2010-10-01 4 views
4

Les règles (Transact-SQL) [1] sont réutilisables ce qui a permis de pallier le défaut de non-réutilisabilité des contraintes de vérification.Les règles sont déconseillées, quoi de plus (TSQL)?

Et maintenant je lis [1] que:

  • « Cette fonctionnalité sera supprimée dans une future version de Microsoft SQL Server Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et un plan pour modifier les applications qui actuellement. Les contraintes de vérification sont créées en utilisant le mot-clé CHECK de CREATE TABLE ou ALTER TABLE "

Alors, qu'est-ce qui est à la place des règles et pourquoi sont-elles obsolètes?


==== Mise à jour:
AlexKuznetsov, sont arrivées niveau contraintes de table terriblement lent?
Ou, les contraintes de vérification au niveau de la table utilisant des fonctions sont lentes par rapport aux contraintes de vérification au niveau de la colonne et resp. règles comme leurs équivalents (puisque les règles sont seulement au niveau des colonnes)? En d'autres termes, les contraintes de vérification au niveau de la colonne et les règles (implicitement seulement au niveau de la colonne) sont-elles égales en performance?
Ensuite, je vois seulement la suppression de la fonctionnalité de réutilisation. L'utilisation de contraintes au niveau de la table non réutilisables était présente auparavant.

En outre, je suis plus intéressé à savoir pourquoi et quoi s'attendre ensuite à savoir comment implémenter des substituts personnalisés pour les fonctionnalités obsolètes du système en utilisant des anciennes fonctionnalités qui avaient toujours été disponibles auparavant.

[1]
MS SQL Server 2008 R2 Livres en ligne. CREATE RULE (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188064.aspx

+3

Vous venez de le citer vous-même - au lieu des règles, 'nous vous recommandons d'utiliser plutôt les contraintes de vérification. Contraintes de vérification sont créées en utilisant le mot clé CHECK de CREATE TABLE ou ALTER TABLE' – LittleBobbyTables

Répondre

3

Eh bien une des règles raison prennent probablement la ligne de touche est je crois aux règles que vous ne pouvez avoir qu'un seul par une colonne et ils vérifient que les données vont dans la base de données, c'est qu'ils ne Ne vérifiez pas les données existantes dans la base de données. Avec les contraintes de vérification, vous pouvez avoir plusieurs contraintes sur une colonne donnée et elles s'appliquent à toutes les données (données arrivant et données déjà dans la base de données). Etant donné que les règles semblent être une solution médiocre à ce que les contraintes de contrôle sont, Microsoft a probablement finalement réalisé qu'il était temps de se débarrasser d'eux, et ils ne sont pas standard SQL.

Si une contrainte de vérification ne le coupe pas, vous pouvez également utiliser un déclencheur pour une logique plus élaborée.

3

Si vous êtes préoccupation est que vous voulez écrire le « code » pour contraindre une fois et le réutiliser sur plusieurs colonnes, je vous suggère de faire ce qui suit:

Créer une fonction avec vos règles de contrainte:

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

Ajouter cette fonction comme une contrainte à la colonne:

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

la meilleure partie de cela est, vous pouvez maintenant écrire réutilisable règles qui prennent en compte plusieurs colonnes.

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

Profitez-en!

+0

la partie pas si bonne à ce sujet est la lenteur: cette approche est terriblement lente –

+0

Merci pour l'entrée. Pouvez-vous le trouver? Aussi avez-vous une idée de ce que les performances des règles sont comparées à cela? Je sais qu'il y a des effets secondaires pour vérifier les contraintes (http://tinyurl.com/2bc2xoe) (et je remarque que vous avez déjà vu cette page), mais je dois imaginer que ces effets secondaires sont également présents dans les règles. En remplacement des règles, je pense que cela fonctionnerait plutôt bien. –

+0

Jeff, j'ai répondu que votre réponse était utile, mais elle est quelque peu orthogonale à mon contexte de question de l'introduction de (nouveaux) changements, politiques, tendances «modernes». –

Questions connexes