Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Förhandsversion av Microsoft Fabric
I den här artikeln beskrivs hur du skapar sekundärnyckelrelationer i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Du skapar en relation mellan två tabeller när du vill associera rader i en tabell med rader i en annan.
Permissions
För att skapa en ny tabell med en foreign key krävs SKAPA TABELL-behörighet i databasen och ALTER SCHEMA-behörighet för schemat där tabellen skapas.
För att skapa en främmande nyckel i en befintlig tabell krävs ALTER TABLE - behörighet på tabellen.
Limitations
En begränsning för främmande nyckel behöver inte enbart länkas till en begränsning för primärnyckel i en annan tabell. Främmande nycklar kan också definieras för att referera till kolumnerna i en
UNIQUE-restriktion i en annan tabell.När ett annat värde än
NULLanges i kolumnen för enFOREIGN KEYvillkor måste värdet finnas i den refererade kolumnen. Annars returneras ett felmeddelande om brott mot en extern nyckel. För att säkerställa att alla värden av en komposit utlänsk nyckelbegränsning är verifierade, angeNOT NULLför alla deltagande kolumner.FOREIGN KEYbegränsningar kan endast referera till tabeller i samma databas på samma server. Referensintegritet mellan databaser måste implementeras via utlösare. Mer information finns i CREATE TRIGGER (Transact-SQL).FOREIGN KEYbegränsningar kan referera till en annan kolumn i samma tabell och kallas självreferens.En
FOREIGN KEYbegränsning som anges på kolumnnivå kan bara visa en referenskolumn. Den här kolumnen måste ha samma datatyp som den kolumn där villkoret definieras.Ett
FOREIGN KEYvillkor som anges på tabellnivå måste ha samma antal referenskolumner som antalet kolumner i listan med villkorskolumner. Datatypen för varje referenskolumn måste också vara samma som motsvarande kolumn i kolumnlistan.Databasmotorn har ingen fördefinierad gräns för antalet
FOREIGN KEYbegränsningar som en tabell kan innehålla som refererar till andra tabeller. Databasmotorn begränsar inte heller antaletFOREIGN KEYbegränsningar som ägs av andra tabeller som refererar till en specifik tabell. Det faktiska antaletFOREIGN KEYbegränsningar som används begränsas dock av maskinvarukonfigurationen och av databasens och programmets utformning. En tabell kan referera till högst 253 andra tabeller och kolumner som sekundärnycklar (utgående referenser). SQL Server 2016 (13.x) och senare versioner ökar gränsen för antalet andra tabeller och kolumner som kan referera till kolumner i en enda tabell (inkommande referenser), från 253 till 10 000. (Kräver minst 130 kompatibilitetsnivå.) Ökningen har följande begränsningar:Fler än 253 externa nyckelreferenser stöds för DML-åtgärder på
DELETEochUPDATE.MERGEoperationer stöds inte.En tabell med en sekundärnyckelreferens till sig själv är fortfarande begränsad till 253 sekundärnyckelreferenser.
Fler än 253 externa nyckelreferenser är för närvarande inte tillgängliga för kolumnlagringsindex eller minnesoptimerade tabeller.
FOREIGN KEYbegränsningar tillämpas inte på temporära tabeller.Om en sekundärnyckel definieras i en CLR-användardefinierad typkolumn måste implementeringen av typen ha stöd för binär ordning. Mer information finns i CLR User-Defined Types.
En kolumn av typen varchar(max) kan endast delta i en
FOREIGN KEYbegränsning om den primära nyckeln som den refererar till också definieras som typ varchar(max).
Skapa en främmande nyckelrelation i Tabelldesignern
Använda SQL Server Management Studio
I Object Explorer högerklickar du på tabellen som finns på sekundärnyckelsidan i relationen och väljer Design.
Tabellen öppnas i Skapa och uppdatera databastabeller.
På menyn Table Designer väljer du Relationer. (Se menyn Table Designer i rubriken, eller högerklicka i det tomma utrymmet i tabelldefinitionen och välj sedan Relationer....)
I dialogrutan Relationer med främmande nyckel väljer du Lägg till.
Relationen visas i listan Vald relation med ett systemnamn i formatet
FK_<tablename>_<tablename>, där det första tabellnamnet är namnet på den externa nyckeltabellen och det andra tabellnamnet är namnet på primärnyckeltabellen. Detta är bara en standard- och vanlig namngivningskonvention för fältet (Namn) i objektet för främmande nyckel.Välj relationen i listan Valda Relationer.
Välj Tabeller och Kolumnspecifikation i rutnätet till höger och välj ellipserna (...) till höger om egenskapen.
I dialogrutan Tabeller och kolumner går du till listrutan Primärnyckel och väljer den tabell som finns på primärnyckelsidan i relationen.
I rutnätet under dialogrutan väljer du de kolumner som bidrar till tabellens primära nyckel. I den intilliggande rutnätscellen till höger om varje kolumn väljer du motsvarande kolumn för utländsk nyckel i tabellen med utländsk nyckel.
Table Designer föreslår ett namn för relationen. Om du vill ändra det här namnet redigerar du innehållet i textrutan Relationsnamn.
Välj OK för att skapa relationen.
Stäng tabellkonstruktörfönstret och spara dina ändringar för att ändringen av den externa nyckelrelationen ska börja gälla.
Skapa en främmande nyckel i en ny tabell
Använd Transact-SQL
I följande exempel skapas en tabell och en främmande nyckelbegränsning definieras för kolumnen TempID som refererar till kolumnen SalesReasonID i tabellen Sales.SalesReason i databasen AdventureWorks. Satserna ON DELETE CASCADE och ON UPDATE CASCADE används för att säkerställa att ändringar som görs i Sales.SalesReason tabell sprids automatiskt till tabellen Sales.TempSalesReason.
CREATE TABLE Sales.TempSalesReason (
TempID INT NOT NULL,
Name NVARCHAR(50),
CONSTRAINT PK_TempSales
PRIMARY KEY NONCLUSTERED (TempID),
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason(SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Skapa en främmande nyckel i en befintlig tabell
Använd Transact-SQL
I följande exempel skapas en sekundärnyckel i kolumnen TempID och refererar till kolumnen SalesReasonID i tabellen Sales.SalesReason i AdventureWorks-databasen.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;