una tipo tabla sentencia para nueva modificar fecha dato como columnas columna agregar adicionar sql sql-server sql-server-2005 tsql

tipo - sentencia para agregar una columna en sql



¿Puedo agregar una columna que no sea nula sin un valor PREDETERMINADO? (8)

@ Damien_The_Unbeliever''s comment , ¿Está agregando una columna calculada? Ni la pregunta ni la respuesta implicaban nada de eso. En caso de columna calculada, el error indica:

"Solo se pueden crear restricciones UNIQUE o PRIMARY KEY en columnas calculadas, mientras que las restricciones CHECK, FOREIGN KEY y NOT NULL requieren que se persistan las columnas calculadas"

OK, si continúas este juego de adivinanzas, aquí está mi script que ilustra la adición de la columna "NOT NULL" en un paso de "ALTER TABLE":

CREATE TABLE TestInsertComputedColumn ( FirstName VARCHAR(100), LastName CHAR(50) ); insert into TestInsertComputedColumn(FirstName,LastName) select ''v'', ''gv8''; select * from TestInsertComputedColumn; ALTER TABLE TestInsertComputedColumn ADD FullName As FirstName + LastName PERSISTED NOT NULL; select * from TestInsertComputedColumn; --drop TABLE TestInsertComputedColumn;

¿Puedo agregar una columna que especifico como NOT NULL? No deseo especificar el valor DEFAULT, pero MS-SQL 2005 dice:

ALTER TABLE solo permite agregar columnas que pueden contener nulos, o tener una definición DEFAULT especificada, o la columna que se agrega es una columna de identidad o marca de tiempo, o alternativamente si no se cumple ninguna de las condiciones previas, la tabla debe estar vacía para permitir la adición de esta columna. La ''prueba'' de columna no se puede agregar a la ''lista de envío'' de la tabla no vacía porque no cumple estas condiciones.

Si la respuesta es SÍ, hágame saber la sintaxis, si es No, especifique el motivo.


Agregue la columna a la tabla, actualice las filas existentes para que ninguna de ellas sea nula y luego agregue una restricción "no nula".


No, SQL Server rechaza razonablemente esto, porque no sabría qué valor deberían tener las filas existentes

Es fácil crear un DEFAULT al mismo tiempo, y luego soltarlo inmediatamente.


No, no puedes. Pero puede considerar especificar el valor predeterminado a ('''')


No, no puedes.

Porque si pudiera, SQL no sabría qué poner como valor en los registros ya existentes. Si no tenía ningún registro en la tabla, funcionaría sin problemas.

La forma más sencilla de hacerlo es crear la columna con un valor predeterminado y luego eliminar la predeterminada.

ALTER TABLE dbo.MyTable ADD MyColumn text NOT NULL CONSTRAINT DF_MyTable_MyColumn DEFAULT ''defaultValue'' ALTER TABLE dbo.MyTable DROP CONSTRAINT DF_MyTable_MyColumn

Otra alternativa sería agregar la columna sin la restricción, llenar los valores para todas las celdas y agregar la restricción.


No, no se puede, ya que SQL Server o cualquier otro motor de base de datos forzará que esta nueva columna sea nula para las filas existentes en su tabla de datos. Pero como no permite un NULL, debe proporcionar un valor predeterminado para respetar su propia restricción. ¡Esto cae bajo gran sentido! El DBE no extrapolará un valor para valores no nulos para las filas existentes.


No.

Simplemente use la cadena vacía '''' (en caso de tipo de carácter) o 0 (si es numérico), etc. como valor PREDETERMINADO


Uso este enfoque para insertar la columna NOT NULL sin valor predeterminado

ALTER TABLE [Table] ADD [Column] INT NULL GO UPDATE [Table] SET [Column] = <default_value> ALTER TABLE [Table] ALTER COLUMN [Column] INT NOT NULL