Conflitto nella creazione di relazione tra due tabelle in sql server 2...

giovedì 22 novembre 2012 - 09.52
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows Server 2008 R2  |  Visual Studio 2010

trinity Profilo | Guru

Salve ragazzi,

allora sto cercando di creare con l'ausilio di sql management studio , una realazione tra due tabelle nel mio db sql.

La tabella in questione sono:

Tab_utenti (nella quale vi sono tutti i record utenti)
Tab_regioni (nella quale ci sono tutte le regioni d'italia)

nella tabela tab_utenti salvo l'idregione che corrisponde alla chiave primaria della tabella tab_regioni.
Pertanto ho pensato dato che quando devo effettuare delle ricerche mi serve il nome della regione di appartenenza dell'utente e quindi nella mia query di selezione deve effettuare un inner join sulla tabella tab_regioni, ho pensato, credendo anche di velocizzare la ricerca, di creare una relazione tra queste due tabelle.

Appena creao la realazione tra queste due tabelle nella quale la chiave esterna è l'idregione della tabella utenti mentre la chiave primaria è l'id della tabella regioni, mi genera questo errore:

Tabella 'Tab_regioni' salvata
Tabella 'Tab_utenti'
- Impossibile creare la relazione 'FK_Tab_utenti_Tab_regioni'.
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Tab_utenti_Tab_regioni". The conflict occurred in database "trycontactdb", table "dbo.Tab_regioni", column 'Id'.

Adesso vi posto il codice delle due tabelle:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

sapete dirmi perchè non posso creare questa relazione? Dove sbaglio?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

sansi Profilo | Newbie

Ciao,
ho provato a creare le tabelle con il tuo codice e a creare la relazione a tabelle vuote e non ho avuto problemi. Le tabelle sono già popolate? Se si potrebbe essere che nella tabella utenti ci sia un idregione che non esiste nella tabella regioni e puoi scovarlo con una query del tipo:

SELECT DISTINCT Tab_utenti.Idregione FROM Tab_utenti LEFT JOIN Tab_regioni ON Tab_utenti.Idregione = Tab_regioni.ID WHERE Tab_regioni.ID is null

Massimo

alx_81 Profilo | Guru

Ma sei sicuro che i dati siano coerenti? Basta avere un idregione che non combacia nella relazione e ti prendi l'errore. Il fatto che lo script vada ad altri significa che il conflitto (come dice l'errore) è sui dati. Verificali e prova a rifare la relazione. In base a quanto dici poi, attenzione, la relazione non velocizza la query, al massimo sono gli indici che vai a creare che lo fanno.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

trinity Profilo | Guru

ok grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5