Enlace un valor predeterminado de columna a una función en SQL 2005
-
22-07-2019 - |
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?
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:
- Haga clic derecho en la tabla y seleccione
Design
- Seleccione la columna DOC_Order (u otra columna que necesite por defecto) en la vista de diseño de la tabla para ver propiedades
- Actualizar
Valor predeterminado o enlace
con el nombre de la función entre paréntesis así:
Nota: como dijo Luk, se necesitan todos los corchetes, incluido el esquema ( dbo en este caso).