Pregunta

¿Cómo puede una columna con un valor por defecto se agrega a una tabla existente en SQL Server 2000 / SQL Server 2005?

¿Fue útil?

Solución

Sintaxis:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Ejemplo:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Notas:

Opcional Nombre De La Restricción:
Si se deja fuera CONSTRAINT D_SomeTable_SomeCol a continuación, SQL Server autogenerar
un Defecto Restricción con un Nombre raro como: DF__SomeTa__SomeC__4FB7FEF6

Opcional Con-Declaración De Valores:
El WITH VALUES sólo es necesario cuando la Columna se aceptan valores null
y desea que el Valor Predeterminado que se usa para los Registros Existentes.
Si tu Columna es NOT NULL, a continuación, se utilizará automáticamente el Valor Predeterminado
para todos los Registros Existentes, ya sea que usted especifique WITH VALUES o no.

Cómo se Inserta el trabajo con un Defecto-Restricción:
Si inserta un Registro en SomeTable y hacer no Especificar SomeCol'valor de s, entonces se utilizará de forma Predeterminada 0.
Si se inserta un Registro y Especificar SomeCol's valor como NULL (y su columna permite valores nulos),
a continuación, el valor Predeterminado-Restricción no ser utilizado y NULL se inserta en el Valor.

Las notas se basan en todo el mundo una gran respuesta a continuación.
Gracias especiales a:
@Yatrix, @WalterStabosz, @YahooSerious, y @StackMan por sus Comentarios.

Otros consejos

ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

La inclusión de la Por DEFECTO rellena la columna en existente filas con el valor por defecto, por lo que la restricción not NULL no sea violado.

Cuando la adición de un columna que acepta valores null, WITH VALUES se asegurará de que el valor PREDETERMINADO se aplica a las filas existentes:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

Tenga cuidado cuando la columna está agregando tiene una NOT NULL restricción, sin embargo, no tiene un DEFAULT la restricción (valor).El ALTER TABLE la declaración se producirá en ese caso, si la tabla tiene filas en él.La solución es quitar el NOT NULL restricción de la nueva columna, o proporcionar una DEFAULT restricción para él.

La mayoría de la versión básica con dos líneas sólo

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

Uso:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

Si quieres añadir varias columnas puede hacerlo de esta manera, por ejemplo:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

Uso:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Referencia: ALTER TABLE (Transact-SQL) (MSDN)

Usted puede hacer la cosa con T-SQL de la siguiente manera.

 ALTER TABLE {TABLENAME}
 ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
 CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Así como se puede utilizar SQL Server Management Studio también haciendo clic a la derecha de la tabla en el menú Diseño, ajuste el valor predeterminado de la tabla.

Y además, si desea agregar la misma columna (si no existe) para todas las tablas en la base de datos, a continuación, utilice:

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;

En SQL Server 2008 R2, voy al modo de diseño en una base de datos de prueba y agregar a mis dos columnas usando el diseñador y el hecho de la configuración con la interfaz gráfica de usuario y, a continuación, el infame Haga Clic En da la opción de "Generar Un Cambio De Secuencia De Comandos"!

Bang aparece una pequeña ventana con, usted lo adivinó, el formato correcto garantizado al trabajo de cambio de secuencia de comandos.Golpear el botón fácil.

Para agregar una columna a una tabla de base de datos existente con un valor por defecto, podemos usar:

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

Aquí es otra forma de agregar una columna a una tabla de base de datos existente con un valor predeterminado.

Una forma mucho más exhaustiva de la secuencia de comandos SQL para agregar una columna con un valor por defecto es de abajo incluyendo la verificación de si la columna existe antes de agregar que también checkin la restricción y caer si es que hay uno.Este script también los nombres de la restricción para que podamos tener una buena convención de nomenclatura (me gusta DF_) y si no SQL nos dará una restricción con un nombre que tiene un número generado al azar;así que es agradable ser capaz nombre de la restricción demasiado.

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN

        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint

                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END

--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END

GO

Estas son dos maneras de agregar una columna a una tabla de base de datos existente con un valor predeterminado.

Alternativamente, usted puede agregar un valor predeterminado sin tener que explícitamente el nombre de la restricción:

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

Si usted tiene un problema con las restricciones default al crear esta restricción, a continuación, pueden ser removidos por:

alter table [schema].[tablename] drop constraint [constraintname]
ALTER TABLE ADD ColumnName {Column_Type} Constraint

El artículo de MSDN ALTER TABLE (Transact-SQL) ha todos los de la sintaxis alter table.

Esto se puede hacer en el SSMS GUI así.Puedo mostrar una fecha predeterminada de abajo, pero el valor por defecto puede ser lo que sea, por supuesto.

  1. Poner la tabla en la vista diseño (clic Derecho sobre la tabla en el objeto explorer->Diseño)
  2. Agregar una columna a la tabla (o haga clic en la columna que desea actualizar si ya existe)
  3. En las Propiedades de la Columna a continuación, escriba (getdate()) o abc o 0 o cualquier valor que desee en Valor predeterminado o de Unión de campo como se muestra a continuación:

enter image description here

Ejemplo:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO

Ejemplo:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

Primero se crea una tabla con el nombre de la estudiante:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Agregar una columna a es:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

La tabla se crea y se agrega una columna a una tabla existente con un valor predeterminado.

Image 1

SQL Server + Alter Table + Agregar Columna + Valor Predeterminado uniqueidentifier

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END

Intente esto

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO

Esto tiene un montón de respuestas, pero siento la necesidad de agregar este método extendido.Esto parece mucho más tiempo, pero es muy útil si usted está agregando un not NULL en el campo a una tabla con millones de filas en una base de datos activa.

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}

UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL

ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

Lo que esto hará es añadir la columna como un campo acepta valores null y con el valor por defecto, actualizar todos los campos el valor por defecto (o puede asignar los valores más significativos), y que por fin va a cambiar la columna NO NULA.

La razón de esto es que si usted actualización a gran escala de la tabla y agregar un nuevo campo not null se ha de escribir en cada fila y por medio de la presente se bloquee toda la tabla como se agrega la columna y, a continuación, escribe todos los valores.

Este método se agrega la columna que acepta valores null que funciona mucho más rápido por sí mismo, a continuación, rellena los datos antes de establecer la no nulo de estado.

He descubierto que hacer todo en una declaración de voluntad de bloqueo de uno de nuestros más activos tablas de 4 a 8 minutos, y muy a menudo me han matado el proceso.Este método cada parte general toma sólo un par de segundos y causas mínima de bloqueo.

Además, si usted tiene una tabla en el área de miles de millones de filas puede ser la pena de lotes de la actualización de este modo:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END

Agregar una nueva columna a una tabla:

ALTER TABLE [table]
ADD Column1 Datatype

Por ejemplo,

ALTER TABLE [test]
ADD ID Int

Si el usuario quiere que se auto incrementa a continuación:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL

Esto se puede hacer mediante el siguiente código.

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

De esta consulta se puede agregar una columna de tipo de datos entero con valor por defecto 0.

Esto es para SQL Server:

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

Ejemplo:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

Si desea agregar restricciones a continuación:

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES

Bien, ahora tengo algunas modificaciones a mi respuesta anterior.Me he dado cuenta de que ninguna de las respuestas mencionadas IF NOT EXISTS.Así que me voy a proporcionar una nueva solución de como me he enfrentado a algunos de los problemas de la alteración de la tabla.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

Aquí TaskSheet es el nombre de la tabla y IsBilledToClient es la nueva columna que se va a insertar y 1 el valor predeterminado.Eso significa que en la nueva columna, ¿cuál será el valor de las filas existentes, por lo que uno se establecerá automáticamente.Sin embargo, usted puede cambiar como usted desee con el respeto de la columna tipo, como la que he utilizado BIT, por lo que poner en valor predeterminado de 1.

Sugiero que el sistema anterior, porque me he encontrado con un problema.Entonces, ¿cuál es el problema?El problema es que si la IsBilledToClient la columna no existe en la tabla de la tabla, a continuación, si se ejecuta sólo la parte del código que se indican a continuación verá un mensaje de error de SQL server en el generador de Consultas.Pero si no existe, por primera vez no habrá ningún error al ejecutar.

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]

SQL Server + Alter Table + Agregar Columna + Valor Predeterminado uniqueidentifier...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top