--Las restricciones se almacenan en syscomments, sysreferences y sysconstraints. /* CREATE TABLE Tabla ( { < definiciónColumna > | < restricciónTabla > } [ ,...n ]) < definiciónColumna > ::= { columnatipoDeDatos } [ [ DEFAULT expresiónConstante ] [ < restricciónColumna > ] [ ,..n] < restricciónColumna > ::= [ CONSTRAINT nombreRestricción ] | [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] ] | [ [ FOREIGN KEY ] REFERENCES tablaRef [ ( columnaRef ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ]] | CHECK ( expresiónLógica ) } < restricciónTabla > ::= [ CONSTRAINT nombreRestricción ] { [ { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED] { ( columna [ ASC | DESC ] [ ,...n ] ) } ] | FOREIGN KEY [ ( columna [ ,...n ] ) ] REFERENCES tablaRef [ ( columnaRef [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] | CHECK ( condicionesBúsqueda ) } */ USE northwind CREATE TABLE dbo.Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName nvarchar (40) NOT NULL, SupplierID int NULL, CategoryID int NULL, QuantityPerUnit nvarchar (20) NULL, UnitPrice money NULL CONSTRAINT DF_Products_UnitPrice DEFAULT(0), UnitsInStock smallint NULL CONSTRAINT DF_Products_UnitsInStock DEFAULT(0), UnitsOnOrder smallint NULL CONSTRAINT DF_Products_UnitsOnOrder DEFAULT(0), ReorderLevel smallint NULL CONSTRAINT DF_Products_ReorderLevel DEFAULT(0), Discontinued bit NOT NULL CONSTRAINT DF_Products_Discontinued DEFAULT(0), CONSTRAINT PK_Products PRIMARY KEY CLUSTERED (ProductID), CONSTRAINT FK_Products_Categories FOREIGN KEY (CategoryID) REFERENCES dbo.Categories (CategoryID) ON UPDATE CASCADE, CONSTRAINT FK_Products_Suppliers FOREIGN KEY (SupplierID) REFERENCES dbo.Suppliers (SupplierID) ON DELETE CASCADE, CONSTRAINT CK_Products_UnitPrice CHECK (UnitPrice >= 0), CONSTRAINT CK_ReorderLevel CHECK (ReorderLevel >= 0), CONSTRAINT CK_UnitsInStock CHECK (UnitsInStock >= 0), CONSTRAINT CK_UnitsOnOrder CHECK (UnitsOnOrder >= 0) ) GO --devuelve todos los tipos de restricciones use northwind go sp_helpconstraint customers --informacion de esquema Select * from information_schema.table_constraints Select * from information_schema.check_constraints Select * from information_schema.referential_constraints go --CREACION DE CONSTRAINTS DROP TABLE INSTRUCTORES CREATE TABLE INSTRUCTORES (CODIGO INT IDENTITY(1,1) NOT NULL, NOMBRE VARCHAR(50), APELLIDO VARCHAR(50), TELEFONO VARCHAR(10) ) --LLAVE PRIMARIA ALTER TABLE INSTRUCTORES ADD CONSTRAINT PK_INSTRUCTORES PRIMARY KEY CLUSTERED (CODIGO) --VALOR PREDETERMINADO ALTER TABLE INSTRUCTORES ADD CONSTRAINT DF_NOMBRE DEFAULT 'SIN NOMBRE' FOR NOMBRE --AGREGAR UNA COLUMNA ALTER TABLE INSTRUCTORES ADD NACIMIENTO SMALLDATETIME --RESTRICCION CHECK PARA NACIMIENTO ALTER TABLE INSTRUCTORES ADD CONSTRAINT CH_CUMPLEAÑOS CHECK (NACIMIENTO>='1995-01-01' AND NACIMIENTO<=GETDATE()) --VALORES UNICOS ALTER TABLE INSTRUCTORES ADD CONSTRAINT U_APELLIDO UNIQUE NONCLUSTERED (APELLIDO) --LLAVE FORANEA [CONSTRAINT nombreRestricción] [FOREIGN KEY] [(columna[,…n])] REFERENCES tablaRef [(columnaRef [,…n])]. [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] --BORRAR UN CONSTRAINT ALTER TABLE INSTRUCTORES DROP CONSTRAINT CH_CUMPLEAÑOS --NO COMPRUEBA LOS DATOS EXISTENTES UNA RESTRICCION SOLO SE PUEDE cHECK O FOREINGKEY USE Northwind ALTER TABLE dbo.Employees WITH NOCHECK------------------------------------------------->NO COMPRUEBA LOS DATOS EXISTENTES ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees( USE Northwind ALTER TABLE dbo.Employees WITH NOCHECK ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees(EmployeeID) --CARGAR NUEVOS DATOS SIN QUE SE VERIFIQUE LA RESTRICCION USE Northwind ALTER TABLE dbo.Employees NOCHECK CONSTRAINT FK_Employees_Employees USE Northwind ALTER TABLE dbo.Employees NOCHECK CONSTRAINT FK_Employees_Employees --CREAR UNA REGLA CREATE RULE AÑOS AS @NACIMIENTO>='1995-01-01' AND @NACIMIENTO<=GETDATE() --VINCULAR LA REGLA EXEC sp_bindrule 'AÑOS', 'INSTRUCTORES.NACIMIENTO' --DESVINCULAR LA REGLA EXEC sp_unbindrule 'INSTRUCTORES.NACIMIENTO' --BORRAR LA REGLA DROP RULE AÑOS --VALOR DEFAULT CREATE DEFAULT NADA AS 'unknown' --VINCULAR EL DEFAULT sp_bindefault NADA, 'INSTRUCTORES.NOMBRE' --DESVINCULAR sp_unbindefault 'INSTRUCTORES.NOMBRE' use northwind go sp_helpconstraint employees |
sábado, 23 de julio de 2011
SCRIPT: CONSTRAINT EN SQL SERVER
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario