valor una tabla quitar por nombre modificar entre defecto como columnas columna campo cambiar asignar alterar agregar sql sql-server default-value notnull

sql - una - Modificar el valor predeterminado de la columna



modificar valor por defecto de una columna sql (5)

Creo que el problema aquí es con la confusión entre los comandos Create Table y Alter Table . Si observamos Create table , podemos agregar un valor predeterminado y una restricción predeterminada al mismo tiempo que:

<column_definition> ::= column_name <data_type> [ FILESTREAM ] [ COLLATE collation_name ] [ SPARSE ] [ NULL | NOT NULL ] [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] | [ IDENTITY [ ( seed,increment ) ] [ NOT FOR REPLICATION ] ] [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ] [ <column_index> ] ex: CREATE TABLE dbo.Employee ( CreateDate datetime NOT NULL CONSTRAINT DF_Constraint DEFAULT (getdate()) ) ON PRIMARY;

Puede verificar la definición completa aquí: http://msdn.microsoft.com/en-IN/library/ms174979.aspx

pero si observamos la definición de Alter Table , con ALTER TABLE ALTER COLUMN no se puede agregar CONSTRAINT las opciones disponibles para ADD son:

| ADD { <column_definition> | <computed_column_definition> | <table_constraint> | <column_set_definition> } [ ,...n ]

Consulte aquí: http://msdn.microsoft.com/en-in/library/ms190273.aspx

Así que tendrás que escribir dos declaraciones diferentes una para la columna Alterar como:

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;

y otro para modificar la tabla y agregar una restricción predeterminada

ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;

¡¡¡Espero que esto ayude!!!

Sé que puedes cambiar el valor predeterminado de una columna existente como this :

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N''SANDNES'' FOR CityBorn;

Pero de acuerdo con this mi consulta se supone que funciona:

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL CONSTRAINT DF_Constraint DEFAULT GetDate()

Así que aquí estoy tratando de hacer que mi columna no sea nula y también establecer el valor predeterminado. Pero obteniendo Incoorect Syntax Error cerca de CONSTRAINT. ¿Me estoy perdiendo algo?


De MSDN ALTER TABLE ejemplos:

D. Agregar una restricción DEFAULT a una columna existente

El siguiente ejemplo crea una tabla con dos columnas e inserta un valor en la primera columna, y la otra columna permanece en NULL . Luego se agrega una restricción DEFAULT a la segunda columna. Para verificar que se aplique el valor predeterminado, se inserta otro valor en la primera columna y se consulta la tabla.

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ; GO INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ; GO ALTER TABLE dbo.doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b ; GO INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ; GO SELECT * FROM dbo.doc_exz ; GO DROP TABLE dbo.doc_exz ; GO

Así que en definitiva, necesitas el ADD CONSTRAINT

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL ; ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;


Debería ser -

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL; ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;


No hay una forma directa de cambiar el valor predeterminado de una columna en el servidor SQL, pero el siguiente script parametrizado hará el trabajo:

DECLARE @table nvarchar(100) DECLARE @column nvarchar(100) DECLARE @newDefault nvarchar(100) SET @table=''TableName'' SET @column=''ColumnName'' SET @newDefault=''0'' IF EXISTS (select name from sys.default_constraints where parent_object_id = object_id(@table) and parent_column_id = columnproperty(object_id(@table), @column, ''ColumnId'')) BEGIN DECLARE @constraintName as nvarchar(200) DECLARE @constraintQuery as nvarchar(2000) SELECT @constraintName = name from sys.default_constraints where parent_object_id = object_id(@table) and parent_column_id = columnproperty(object_id(@table),@column, ''ColumnId'') SET @constraintQuery = ''ALTER TABLE ''+@table+'' DROP CONSTRAINT ''+@constraintName +''; ALTER TABLE ''+ @table + '' ADD CONSTRAINT '' + @constraintName +'' DEFAULT ''+@newDefault+'' FOR ''+@column EXECUTE sp_executesql @constraintQuery END

Solo llena los parámetros y ejecuta. El script elimina la restricción existente y crea una nueva con un valor predeterminado designado.


Para alterar una columna existente necesitas:

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL; ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;