2009-01-14 13 views
11

tengo una columna que contiene los elementos que se pueden clasificar por el usuario:enlazar un valor predeterminado de columna a una función en SQL 2005

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

Estoy tratando de encontrar una manera de inicializar correctamente cuando el DOC_Order la entrada es creada. Un buen valor sería el DO-CID correspondiente (ya que está autoasignado) o MAX (DOC-ORDER) + 1

Después de googlear un poco vi que era posible asignar el retorno de una función escalar al valor predeterminado columna.

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

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

END 

Pero cada uno de mis intentos usando estudio MS SQL Management terminó en un "Error al validar el valor predeterminado para la columna 'DOC_Order'" mensaje.

¿Alguna idea de qué es exactamente la sintaxis de SQL para asignar una función a DEFAULT?

Respuesta

20

La sintaxis para añadir un defecto así sería

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

Además, es posible que desee alterar su función de manejar cuando DOC_Order es nulo

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

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

END 
+0

¡Perfecto! ¡Muchas gracias! – Luk

+0

¿Hay alguna manera de pasarle un parámetro a esa función? –

7

si alguien quiere hacerlo usando la interfaz, escribiendo

[dbo].[NEWDOC_Order]() 

hace el truco. Al parecer, necesitas todos los corchetes o rechazará tu entrada.

1

Aquí hay capturas de pantalla que hacerlo a través del servidor Management Studio interfaz gráfica de usuario de SQL:

  1. Haga clic derecho en la tabla y seleccione Design

enter image description here

  1. Seleccione DOC_Order columna (u otra columna que necesite el valor predeterminado) en la vista de diseño de la tabla para ver adecuada lazos

enter image description here

  1. actualización Default Value or Binding con nombre de función con soportes así:

enter image description here

Nota: como se dijo Luk, toda Se necesitan corchetes incluyendo el esquema (dbo en este caso).

Cuestiones relacionadas