2009-01-14 9 views
11

I ont une colonne contenant des éléments qui peuvent être triés par l'utilisateur:Liez une valeur par défaut de la colonne à une fonction dans SQL 2005

DOC_ID DOC_Order DOC_Name 
    1  1  aaa 
    2  3  bbb 
    3  2  ccc 

J'essaie de trouver un moyen d'initialiser correctement DOC_Order lorsque le l'entrée est créée. Une bonne valeur serait soit le DO-CID correspondant (car il est auto-assigné), soit MAX (DOC-ORDER) + 1

Après un peu de googling j'ai vu qu'il était possible d'assigner un retour de fonction scalaire à la valeur par défaut colonne.

CREATE FUNCTION [dbo].[NEWDOC_Order] 
(
) 
RETURNS int 
AS 
BEGIN 

RETURN (SELECT MAX(DOC_ORDER) + 1 FROM DOC_Documents) 

END 

Mais chacun de mes essais en utilisant MS SQL Management Studio est terminée dans une « Erreur de validation de la valeur par défaut pour la colonne « DOC_Order » » message.

Une idée de ce que la syntaxe SQL exacte pour affecter une fonction à DEFAULT est?

Répondre

20

la syntaxe pour ajouter une valeur par défaut comme ce serait

alter table DOC_Order 
add constraint 
df_DOC_Order 
default([dbo].[NEWDOC_Order]()) 
for DOC_Order 

, vous pouvez également modifier votre fonction pour gérer lorsque DOC_Order est nul

Create FUNCTION [dbo].[NEWDOC_Order] 
(
) 
RETURNS int 
AS 
BEGIN 

RETURN (SELECT ISNULL(MAX(DOC_ORDER),0) + 1 FROM DOC_Documents) 

END 
+0

Parfait! Merci beaucoup! – Luk

+0

Existe-t-il un moyen de transmettre cette fonction à un paramètre? –

7

Si quelqu'un veut le faire en utilisant l'interface, en tapant

[dbo].[NEWDOC_Order]() 

fait l'affaire. Vous avez apparemment besoin de tous les crochets ou il rejettera votre entrée.

1

est ici captures d'écran pour le faire via SQL Server Management GUI Studio:

  1. Faites un clic droit sur la table et sélectionnez Design

enter image description here

  1. Sélectionnez la colonne DOC_Order (ou toute autre colonne nécessitant par défaut) dans la vue de conception du tableau pour afficher liens

enter image description here

  1. Mise à jour Default Value or Binding avec le nom de la fonction avec des supports comme ceci:

enter image description here

Note: comme Luk a déclaré, tout crochets sont nécessaires, y compris le schéma (dbo dans ce cas).

Questions connexes