2009-01-14 7 views
11

Ich habe eine Spalte mit Elementen, die vom Benutzer sortiert werden können:auf eine Funktion in SQL 2005

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

Ich versuche, einen Weg, um herauszufinden, um richtig DOC_Order zu initialisieren, wenn die Eintrag wird erstellt. Ein guter Wert wäre entweder das entsprechende DO-CID (da es automatisch zugewiesen wird) oder MAX (DOC-ORDER) + 1

Nach einigem googeln sah ich, dass es möglich war, die Rückkehr einer skalaren Funktion auf den Standardwert zu setzen Säule.

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

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

END 

Aber jeder meiner versucht MS SQL Management Studio endete in einer Nachricht „Fehler der Standard für Spalte‚DOC_Order‘Validierung“.

Gibt es eine Vorstellung davon, was genau die SQL-Syntax ist, um DEFAULT eine Funktion zuzuweisen?

Antwort

20

Die Syntax ein Standard wie das sein würde

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

auch hinzufügen, könnten Sie Ihre Funktion zu behandeln verändern wollen, wenn DOC_Order

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

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

END 
+0

Perfekt! Danke vielmals! – Luk

+0

Gibt es eine Möglichkeit, diese Funktion als Parameter zu übergeben? –

7
null ist

wenn jemand tun will es mit die Schnittstelle, Eingabe

[dbo].[NEWDOC_Order]() 

macht den Trick. Du brauchst anscheinend alle Klammern oder es wird deine Eingabe ablehnen.

1

Hier Screenshots es durch SQL Server Management Studio GUI zu tun:

  1. Rechts auf Tabelle klicken und wählen Design

enter image description here

  1. Wählen Sie DOC_Order Spalte (oder andere Spalte benötigen Standard) in der Entwurfsansicht der Tabelle, um richtig zu sehen
  2. Bindungen

enter image description here

  1. aktualisieren Default Value or Binding mit Funktionsnamen mit Klammern wie so:

enter image description here

Hinweis: wie Luk angegeben, sind alle Klammern werden benötigt, einschließlich des Schemas (dbo in diesem Fall).