Modificar campo en Tabla Ledger y que vuelva a ser NOT NULL

EmotionsDev 0 Puntos de reputación
2024-03-08T11:37:39.28+00:00

Hola, estoy haciendo pruebas para implementar una tabla Ledger sobre una base ya existente y me estoy encontrando un problema.

Paso 1 | creo una tabla ledger temporal con los mismos campos que la que ya tengo

Paso 2 | copio todos los datos de la antigua a la temporal

Paso 3 | elimino la antigua

Paso 4 | renombro la temporal como la antigua

Hasta aquí todo huele a flores y rosas.

Ahora ponemos el caso que un campo de la ledger es un money not null y quiero cambiarlo a decimal not null, aqui es cuando empiezan los problemas.

Realizo la siguiente acción:

ALTER TABLE dbo.TablaDePrueba ADD ImporteDebe_temp Decimal(19,3) NOT NULL;

ALTER TABLE solo permite agregar columnas que contengan valores NULL, que tengan la definición DEFAULT, que la columna que se agrega sea una columna de identidad o de marca de tiempo, o si ninguna de las condiciones anteriores se cumplen, la tabla debe estar vacía para que se pueda agregar esta columna. La columna 'ImporteDebe_temp' no se puede agregar a la tabla 'TablaDePrueba' no vacía porque no cumple estas condiciones.

Si lo hago de otra forma:
ALTER TABLE dbo.TablaDePrueba ADD ImporteDebe_temp Decimal(19,3) DEFAULT 0 NOT NULL;

Solo se pueden agregar a las tablas de libro de contabilidad las columnas que admiten valores NULL que no tienen el valor predeterminado WITH VALUES.

¿Existe alguna forma de poder realizar una modificación de tipo sin perder la condición NOT NULL en la tabla Ledger?

Gracias

SQL Server
SQL Server
Familia de sistemas de análisis y administración de bases de datos relacionales de Microsoft para soluciones de comercio electrónico, línea de negocio y almacenamiento de datos.
140 preguntas
0 comentarios No hay comentarios
{count} votos

1 respuesta

Ordenar por: Muy útil
  1. Jonathan Pereira Castillo 16,030 Puntos de reputación Personal externo de Microsoft
    2025-01-22T21:05:21.46+00:00

    ¡Hola SrTemas!

    Esperamos que este mensaje te encuentre bien.

    Lamentamos sinceramente la demora en abordar tu tema en este foro.

    Para modificar un campo en una tabla Ledger y mantener la condición NOT NULL, puedes seguir estos pasos:

    Agregar la columna temporal permitiendo NULL:

    ALTER TABLE dbo.TablaDePrueba ADD ImporteDebe_temp Decimal(19,3) NULL;
    

    Actualizar la columna temporal con valores de la columna original:

    UPDATE dbo.TablaDePrueba SET ImporteDebe_temp = ImporteDebe;
    

    Modificar la columna temporal para que no permita NULL:

    ALTER TABLE dbo.TablaDePrueba ALTER COLUMN ImporteDebe_temp Decimal(19,3) NOT NULL;
    

    Eliminar la columna original:

    ALTER TABLE dbo.TablaDePrueba DROP COLUMN ImporteDebe;
    

    Renombrar la columna temporal a la original:

    EXEC sp_rename 'dbo.TablaDePrueba.ImporteDebe_temp', 'ImporteDebe', 'COLUMN';
    

    Esto debería resolver tu problema sin perder la condición NOT NULL.

    Si no recibimos una respuesta tuya en los próximos días, procederemos a cerrar el tema. Sin embargo, queremos asegurarte que siempre estamos disponibles para cualquier asistencia que puedas necesitar.

    Agradecemos tu comprensión y estamos aquí para ayudar en lo que sea necesario.

    Estaré atento a tu respuesta.,

     Jonathan

    ----------*

    Tu opinión es muy importante para nosotros! Si esta respuesta resolvió tu consulta, por favor haz clic en ''. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.

    0 comentarios No hay comentarios

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.