2009-09-01 11 views
24

¿Cómo se altera una columna para eliminar el valor predeterminado?¿Cómo se elimina un valor predeterminado de una columna en una tabla?

La columna fue creado con:

ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N' 

Y luego alterada con:

alter table sometable alter column somecolumn nchar(1) null 

Eso permite nulos, pero el valor por defecto sigue siendo. ¿Cómo puedes eliminarlo?

+0

posible duplicado de [¿Cómo se elimina un valor predeterminado o una restricción similar en T-SQL?] (Http://stackoverflow.com/questions/1123060/how-do-you-drop-a-default-value- o-similar-constricción-en-t-sql) –

+0

¿tiene alguna posibilidad de que le proporcione un VTC? –

+0

@RubenBartelink, las respuestas son la mitad de la solución.Si un Mods quiere fusionarse, no me importa, pero mi respuesta a continuación llega al final de cómo eliminar la restricción, en lugar de solo descubrir el nombre. – Yishai

Respuesta

28

Es una restricción predeterminada, es necesario realizar una:

ALTER TABLE 
DROP CONSTRAINT ConstraintName 

Si no especifica un nombre al crear la restricción, a continuación, SQL Server creado uno para usted. Puede usar SQL Server Management Studio para buscar el nombre de restricción navegando a la tabla, abriendo su nodo de árbol y luego abriendo el nodo de Restricciones.

Si mal no recuerdo, la restricción se denominará algo en la forma de DF_SomeStuff_ColumnName.

EDIT: Josh W.'s respuesta contiene un enlace a SO question que muestra cómo encontrar el nombre de restricción generada automáticamente mediante SQL en lugar de utilizar la interfaz de Management Studio.

10

Esto es lo que ocurrió con (antes de ver la respuesta Josh W., bueno en realidad lo vi pero desnatada es tan rápido que las comprendió):

declare @name nvarchar(100) 
select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable') 

if (@name is not null) 
    begin 
    exec ('alter table [sometable] drop constraint [' + @name +']') 
    end 

La ventaja que tengo aquí es que sé que solo hay una restricción de ese tipo en toda la mesa. Si hubiera habido dos, bueno, supongo que es por eso que se supone que debes nombrarlos;).

(Las cuestiones es que que esta es una modificación hecha a 10 bases de datos de clientes diferentes, por lo que no es un nombre coherente para poner en un script)

+0

Sí, eso se convierte en un problema para cualquier despliegue de base de datos a gran escala. Lo que terminas teniendo que hacer es forzarte a nombrar siempre tus restricciones para que sean consistentes en todos los entornos. Ej .: ALTER tabla alguna tabla Add somecolumn nchar (1) NOT NULL CONSTRAINT DF_TableName_SomeColumn DEFAULT 'N' –

+1

Creo que su solución no funcionará en una tabla con múltiples valores predeterminados, eliminará la última – AaA

+0

Si la tabla tiene alguna constriñe a diferentes columnas es necesario filtrar por nombre de columna: 'declaran @ name nvarchar (100) seleccionar * de sys.objects o unen sys.columns COL sobre o.object_id = col.default_object_id donde type = 'D' y parent_object_id = object_id ('tablename') y col.name = 'columnname'' – MirrorBoy

4
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%' 

Encuentra su restricción y utilizar DROP CONSTRAINT a caer eso. O ejecute un ciclo de cursor/while para eliminar todos los valores predeterminados similares en la base de datos.

+0

No funciona, porque mis constrains tienen un nombre como' DF_tableName_someLetters ' – MirrorBoy

0
alter table <tablename> drop constraint <constraintname> 

si no se conoce el nombre de la restricción puede utilizar estudio manangement de SQL Server para comprobar el nombre de restricción .... espero que esto ayude.

0

Si está utilizando SQL Server Management Studio, esto es bastante fácil.

Si hay varias restricciones asociadas con la tabla y no desea eliminarlas todas, haga clic derecho en la restricción y seleccione "Script Cnstraint as -> CREATE to -> New Query Editor Window". Esto le mostrará el código que creó la restricción, incluido el nombre de columna y el valor predeterminado.

Luego haga clic con el botón derecho en la restricción que desea eliminar y seleccione Eliminar.

Cuestiones relacionadas