Crear una tabla en SQL SERVER es sencillo, ya se explicó en Crear una tabla en SQL Server Si la tabla ya está creada y sólo queremos modificar la
longitud de un campo, su nombre o eliminarlo tenemos que hacerlo mediante scripts de texto, pero es
muy sencillo basta escribir estas líneas en el analizador de consultas y pulsar
el botón ejecutar.
Para modificar la longitud del campo: (le ponemos 50 Por ejemplo)
Para modificar la longitud del campo: (le ponemos 50 Por ejemplo)
ALTER TABLE
PROPIETARIO.Nombre_Tabla ALTER COLUMN Nombre_Columna char(50) NULL
Al final se especifica si el campo permite nulos NULL o no NOT NULL.
Si el campo a modificar es clave (Primary
Key) o tiene una referencia (Foreing Key) no dejará hacerlo En este caso hacemos
para la Primary Key.
ALTER TABLE PROPIETARIO.Nombre_Tabla DROP CONSTRAINT PK_NombreClave
ALTER TABLE PROPIETARIO.Nombre_Tabla ALTER COLUMN Nombre_Campo
char(50) NOT NULL
ALTER TABLE PROPIETARIO.Nombre_Tabla ADD CONSTRAINT [PK_NombreClave]
PRIMARY KEY CLUSTERED ([Nombre_Campo] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
No deja por que hay una tabla dependiente
Si hay otra tabla que depende de este campo al ejecutar estas
líneas, no nos dejará hacerlo pues saldrá un mensaje del tipo:
Mens. 3725, Nivel 16, Estado 0, Línea 1
The constraint 'PK_NombreClave' is being referenced by table 'tbTablaDependiente', foreign
key constraint 'fk_Nombre_Tabla'.
Mens. 3727, Nivel 16, Estado 0, Línea 1
Could
not drop constraint. See previous errors.
El
la ventana del explorador de objetos, al deplegar sus campos, sobre el apartado
Claves, nos aparecerá 'fk_Nombre_Tabla' Que es la que nos impide modificar la tabla
original, primero habrá que modificar este campo con la misma instrucción
inicial pero para la tabla dependiente.
En
el apartado de los campos de la tabla nos aparecerá marcado el campo
dependiente de la fk con el mismo símbolo del la llave que aparece en la
foreing key.
Una
vez identificado el campo se procede como en el primer caso, ahora la secuencia
a seguir es la siguiente:
Primero
borramos la Foreing Key (fk) de la tabla secundaria (la que depende de la tabla que queremos modificar.
Luego borramos
la Primary Key (Pk) de la tabla en la que deseamos modificar la longitud del
campo.
Luego alteramos la longitud del campo en ambas tablas, primero en la tabla dependiente o secundaria y luego en la tabla primaria. Finalmente generamos de nuevo
la Pk de la tabla primaria (y ojo por que aquí el orden es inverso) y
finalmente creamos al fk de la tabla secundaria.
ALTER TABLE Propietario.Nombre_Tabla_Secundaria DROP CONSTRAINT
FK_strUT
ALTER TABLE Propietario.Nombre_Tabla DROP CONSTRAINT PK_Nombre_Tabla
ALTER TABLE Propietario.Nombre_Tabla_Secundaria ALTER COLUMN strUT char(10) NULL
ALTER TABLE Propietario.Nombre_Tabla ALTER COLUMN
strCodigo char(10) NOT NULL
ALTER TABLE Propietario.Nombre_Tabla ADD CONSTRAINT PK_Nombre_Tabla PRIMARY KEY CLUSTERED (strCodigo ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
ALTER TABLE Propietario.Nombre_Tabla_Secundaria WITH CHECK ADD CONSTRAINT fk_strUT FOREIGN
KEY (strUT)
REFERENCES Propietario.Nombre_Tabla (strCodigo)
Si queremos añadir campos nuevos a la tabla es algo más complejo, pero también es muy sencillo basta con ejecutar un script de este tipo.
IF NOT EXISTS (SELECT * from syscolumns where id = object_id('PROPIETARIO.Nombre_Tabla')
AND syscolumns.name = 'Nombre_Campo' )
BEGIN
ALTER TABLE PROPIETARIO.Nombre_Tabla ADD
Nombre_Campo CHAR(50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL
END
GO
Si queremos que el campo no permita valores nulos en vez de NULL ponemos poner NOT NULL, en este caso tal vez nos interese indicar el tipo de valor que tendrá por defecto, para ello usamos DEFAULT con el valor deseado.
IF NOT EXISTS (SELECT * from syscolumns where id = object_id
('PROPIETARIO.Nombre_Tabla')AND syscolumns.name = 'Nombre_Campo' )
('PROPIETARIO.Nombre_Tabla')AND syscolumns.name = 'Nombre_Campo' )
BEGIN
ALTER TABLE PROPIETARIO.Nombre_Tabla ADD
Nombre_Campo CHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
Nombre_Campo CHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
DEFAULT 'Valor_defecto'
END
GO
Para modificar el nombre del campo
ALTER TABLE PROPIETARIO.Nombre_Tabla
CHANGE 'Nombre_Campo_Antiguo' 'Nombre_Campo_Nuevo'
Para eliminar un campo.
No debe tener integridad referencial con otros campos de otras tablas de la
base de datos, si la tiene aún se puede eliminar pero debe cumplir la condición
de que todas las filas tengan el campo a eliminar vacio o a NULL.
ALTER TABLE PROPIETARIO.Nombre_Tabla DROP COLUMN Nombre_Campo
No hay comentarios:
Publicar un comentario