SQL Query werkt niet

Dit is mijn eerste keer dat ik SQL Server gebruik en ik heb deze tabellen gemaakt:

create table Department
(
    D_Number int not null,
    D_Name varchar(20),
    D_MgrSSN int,
    D_MgrDate datetime,
    primary key(D_Number),
    unique(D_Name),
)

create table Empolyee
(
    E_SSN int not null,
    E_FName varchar(20),
    E_LName varchar(20),
    E_Sex varchar(6),
    E_BDate datetime,
    E_Salary decimal(10,2),
    E_Address varchar(50),
    E_Department varchar(20),
    E_SuperSSN int,
    primary key(E_SSN),
    foreign key(E_Department) references Department(D_Number),
)

en wanneer ik loop krijg ik deze foutmelding:

Kolom 'Department.D_Number' is niet hetzelfde gegevenstype als verwijzingskolom 'Empolyee.E_Department' in foreign key 'FK_ Empolyee _E_Depa__0CBAE877'.

0
De fout zegt het al, uw sleutels E_Department zijn niet van hetzelfde type als D_Number . U kunt E_Department wijzigen om int in te voeren.
toegevoegd de auteur Cyclonecode, de bron
Wat is de daadwerkelijke vraag die u uitvoert?
toegevoegd de auteur Aaron, de bron
Nevermind, ik zie het. U kunt de tabel Werknemer niet maken.
toegevoegd de auteur Aaron, de bron
U toont geen enkele onderzoeksinspanning. U hebt geprobeerd de query uit te voeren en de fout geplakt zonder ons zelfs maar af te vragen wat het betekent.
toegevoegd de auteur TheBoyan, de bron
ik gebruik SQL SERVER 2008, is dat wat je nodig hebt?
toegevoegd de auteur R.Vector, de bron
dit is mijn eerste keer dat ik met SQL Server werk, dus ik denk dat mijn querykennis in orde is.
toegevoegd de auteur R.Vector, de bron

5 antwoord

Persoonlijk denk ik dat SQL Server uitstekend werk heeft geleverd met de foutmelding, het vertelt u precies wat moet worden hersteld.

Kijk naar de twee velden die u hebt gedefinieerd, de ene is een varchar (20) en de andere is een integer .

Als u wilt dat een externe sleutel overeenkomt met de primaire sleutel, moet deze van hetzelfde type zijn. Wijzig beide in int of beide in varchar . Wat ook zinvol is voor uw bedrijfsmodel.

12
toegevoegd

Jouw:

E_Department is varchar
and
D_Number is integer 
//thats the problem
so make E_Department integer //same data type
5
toegevoegd

Dit komt omdat E_Department varchar (20) is, maar de kolom waarnaar wordt verwezen, D_Number , is int . Je moet van beiden hetzelfde type maken ( int , omdat je het "nummer" noemde).

1
toegevoegd

D_Number is een int en E_Depment is varchar (50) ze moeten hetzelfde zijn voor de declaratie van de buitenlandse sleutels om te werken.

1
toegevoegd

Een aantal tips: - Werknemer is verkeerd gespeld - Gebruik SSN nooit als primaire sleutel, omdat u het niet gemakkelijk kunt indexeren.
- D_Number is niet ingesteld als identiteit voor de departementsgroep en is ook niet ingesteld als uniek.

Het probleem: -De typen E_Department is een varchar (20) en D_Number is een int, dus het werkt natuurlijk niet

0
toegevoegd