Pregunta

Tengo una columna que contiene elementos que el usuario puede ordenar:

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

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

Después de buscar un poco en Google, vi que era posible asignar el retorno de una función escalar a la columna predeterminada.

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 de usar el estudio MS SQL Management terminó en un " Error al validar el valor predeterminado para la columna 'DOC_Order' " mensaje.

¿Alguna idea de cuál es la sintaxis SQL exacta para asignar una función a DEFAULT?

¿Fue útil?

Solución

La sintaxis para agregar un valor predeterminado como ese sería

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

Además, es posible que desee modificar su función para 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

Otros consejos

SI alguien quiere hacerlo usando la interfaz, escribiendo

[dbo].[NEWDOC_Order]()

hace el truco. Aparentemente necesita todos los corchetes o rechazará su entrada.

Aquí hay capturas de pantalla para hacerlo a través de la GUI de SQL Server Management Studio:

  1. Haga clic derecho en la tabla y seleccione Design

 ingrese la descripción de la imagen aquí

  1. Seleccione la columna DOC_Order (u otra columna que necesite por defecto) en la vista de diseño de la tabla para ver propiedades

 ingrese la descripción de la imagen aquí

  1. Actualizar Valor predeterminado o enlace con el nombre de la función entre paréntesis así:

 ingrese la descripción de la imagen aquí

Nota: como dijo Luk, se necesitan todos los corchetes, incluido el esquema ( dbo en este caso).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top