>io dovrei creare uno script T-SQL per poter eliminare una relazione
>dalla mia base dati in SQL SERVER. Qualcuno mi potrebbe aiutare.
>Anzi voorei anceh sapere prima se esiste e poi eventualmente
>eliminarla.
Ciao!
Allora, le foreign key stanno all'interno di una catalog view chiamata sys.foreign_keys. Inoltre puoi anche interrogare lo schema INFORMATION_SCHEMA, tabella TABLE_CONSTRAINT, filtrando per CONSTRAINT_TYPE = 'FOREIGN KEY':
Qui di seguito uno script di esempio. Ho utilizzato la sys.foreign_keys:
USE tempdb;
GO
CREATE TABLE dbo.Testata
(
id int NOT NULL
, descrizione varchar(50) NOT NULL
, data datetime DEFAULT(GETDATE())
, CONSTRAINT PK_Testata PRIMARY KEY CLUSTERED
(
id
)
)
GO
INSERT INTO dbo.Testata (id, descrizione)
VALUES (1, 'PROVA 1')
INSERT INTO dbo.Testata (id, descrizione)
VALUES (2, 'PROVA 2')
INSERT INTO dbo.Testata (id, descrizione)
VALUES (3, 'PROVA 3')
INSERT INTO dbo.Testata (id, descrizione)
VALUES (4, 'PROVA 4')
INSERT INTO dbo.Testata (id, descrizione)
VALUES (5, 'PROVA 5')
GO
CREATE TABLE dbo.Dettaglio
(
id int NOT NULL
, idriga int NOT NULL
, importo decimal(10,2) NOT NULL
, causale varchar(30) NOT NULL
, CONSTRAINT PK_Dettaglio PRIMARY KEY CLUSTERED
(
id
, idriga
)
)
GO
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (1, 1, 10, 'CAUSALE 1')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (1, 2, 20, 'CAUSALE 1')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (2, 1, 100, 'CAUSALE 2')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (2, 2, 200, 'CAUSALE 2')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (2, 3, 300, 'CAUSALE 3')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (3, 1, 5, 'CAUSALE 3')
INSERT INTO dbo.Dettaglio (id, idriga, importo, causale)
VALUES (4, 1, 50, 'CAUSALE 3')
GO
ALTER TABLE dbo.Dettaglio
ADD CONSTRAINT FK_Testata_Dettaglio
FOREIGN KEY(id)
REFERENCES dbo.Testata (id)
GO
-- Foreign key creata.
SELECT [name] FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'FK_Testata_Dettaglio')
/*
name
------------------------------
FK_Testata_Dettaglio
*/
-- Ecco come dropparla, se esiste:
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'FK_Testata_Dettaglio'))
ALTER TABLE dbo.Dettaglio DROP CONSTRAINT FK_Testata_Dettaglio
GO
-- Foreign key eliminata
SELECT [name] FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'FK_Testata_Dettaglio')
/*
name
------------------------------
*/
DROP TABLE dbo.dettaglio
DROP TABLE dbo.testata
GO
>GRazzie mille anticipatamente per il vostro interessamento.
di nulla!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org