i den här artikeln lär vi oss olika metoder som används för att uppdatera data i en tabell med data från andra tabeller. ”Uppdatera från Välj” frågestruktur är den viktigaste tekniken för att utföra dessa uppdateringar.
en uppdateringsfråga används för att ändra en befintlig rad eller rader i databasen. UPPDATERINGSFRÅGOR kan ändra alla tabellrader, eller så kan vi begränsa uppdateringssatsen påverkar för vissa rader med hjälp av where-klausulen., För det mesta använder vi konstanta värden för att ändra data, till exempel följande strukturer.
hela uppdateringssatsen används för att ändra hela tabelldata med samma värde.,
1
2
|
UPDATE table
SET col1 = constant_value1 , col2 = constant_value2 , colN = constant_valueN
|
The conditional update statement is used to change the data that satisfies the WHERE condition.,
1
2
3
|
uppdateringstabell
ställ in col1 = constant_value1 , col2 = constant_value2 , Coln = constant_valuen
där col = val
|
för olika scenarier kan dock inte denna typ av konstant värdeanvändning räcka för oss, och vi behöver att använda andra tabelldata för att uppdatera vår tabell., Denna typ av uppdateringsdeklarationer är lite komplicerad än de vanliga strukturerna. I följande avsnitt kommer vi att lära oss att skriva den här typen av uppdateringsfråga med olika metoder, men först måste vi förbereda våra provdata. Då gör vi det här.
förbereda provdata
med hjälp av följande fråga kommer vi att skapa personer och adresslistor och fylla dem med några syntetiska data. Dessa två tabeller har en relation genom kolumnen PersonId, vilket innebär att i dessa två tabeller representerar kolumnvärdet PersonId samma person.,
uppdatera från SELECT: Join Method
i den här metoden kommer tabellen som ska uppdateras att förenas med referenstabellen (sekundär) som innehåller nya radvärden. Så att vi kan komma åt matchade data i referenstabellen baserat på den angivna kopplingstypen. Slutligen kan kolumnerna som ska uppdateras matchas med refererade kolumner och uppdateringsprocessen ändrar dessa kolumnvärden.
i följande exempel uppdaterar vi kolumndata för personcityname och PersonPostCode med kolumndata för staden och Postnummer i Adresslistabellen.,
1
2
3
4
5
6
7
8
|
UPDATE Per
SET
Per.PersonCityName=Addr.City,
Per.PersonPostCode=Addr.PostCode
FROM Persons Per
INNER JOIN
AddressList Addr
ON Per.PersonId = Addr.,
efter utförandet av uppdateringen från en utvald fråga kommer utmatningen från Personstabellen att vara som visas nedan;
låt oss försöka förstå ovanstående kod: vi skrev tabellnamnet, vilket kommer att uppdateras efter uppdateringssatsen., Efter det inställda sökordet specificerade vi kolumnnamnen som ska uppdateras, och vi matchade dem också med de refererade tabellkolumnerna. Efter från-klausulen skrev vi om tabellnamnet, vilket kommer att uppdateras. Efter Inner JOIN-klausulen specificerade vi den refererade tabellen och gick med i tabellen för att uppdateras. Utöver detta kan vi ange en WHERE-klausul och filtrera alla kolumner i den refererade eller uppdaterade tabellen. Vi kan också skriva om frågan med hjälp av alias för tabeller.,
Performance tips:index är mycket användbara databasobjekt för att förbättra sökresultatet i SQL Server. Särskilt om vi arbetar med utförandet av uppdateringsfrågan bör vi ta hänsyn till denna sannolikhet. Följande exekveringsplan illustrerar en exekveringsplan för föregående fråga. Den enda skillnaden är att denna fråga uppdaterade 3.000.000 rader av personer tabellen. Denna fråga slutfördes inom 68 sekunder., Vi lade till ett icke-grupperat index på tabellen personer innan för att uppdatera och det tillagda indexet involverar kolumnerna PersonCityName och PersonPostCode som indexnyckel. följande exekveringsplan visar en exekveringsplan för samma fråga, men den här frågan slutfördes inom 130 sekunder på grund av det tillagda indexet, till skillnad från det första. Indexuppdateringen och Sorteringsoperatörerna förbrukar 74% kostnad för exekveringsplanen., Vi har sett denna uppenbara prestandaskillnad mellan samma fråga på grund av indexanvändning på de uppdaterade kolumnerna. Som ett resultat, om de uppdaterade kolumnerna används av index, så här, till exempel, kan sökresultatet påverkas negativt. I synnerhet bör vi överväga detta problem om vi kommer att uppdatera ett stort antal rader. För att lösa problemet kan vi inaktivera eller ta bort indexet innan du kör uppdateringsfrågan. å andra sidan ses ett varningsskylt på Sortoperatören, och det indikerar att något inte går bra för den här operatören., När vi håller musen över den här operatören kan vi se varningsdetaljerna.
under utförandet av frågan beräknar query optimizer en nödvändig minnesförbrukning för frågan baserat på de uppskattade radnumren och radstorleken. Denna förbrukningsuppskattning kan dock vara fel av olika skäl, och om frågan kräver mer minne än uppskattningen använder den tempdb-data. Denna mekanism kallas en tempdb spill och orsakar prestandaförlust., Anledningen till detta: minnet är alltid snabbare än tempdb-databasen eftersom tempdb-databasen använder diskresurserna. Du kan se denna SQL Server 2017: SQL Sort, Spill, minne och adaptiv minne Grant Feedback fantastisk artikel för mer information om tempdb spill frågan. uppdatera från SELECT: KOPPLINGSUTDRAGETKOPPLINGSUTDRAGET används för att manipulera (infoga, uppdatera, ta bort) en måltabell genom att referera till en källtabell för de matchade och oöverträffade raderna. KOPPLINGSUTDRAGET kan vara mycket användbart för att synkronisera tabellen från vilken källtabell som helst., Nu, om vi går tillbaka till vår position, kan kopplingsutgåvan användas som en alternativ metod för att uppdatera data i en tabell med dem i en annan tabell. I den här metoden kan referenstabellen ses som en källtabell och måltabellen är tabellen som ska uppdateras. Följande fråga kan vara ett exempel på denna användningsmetod.,
låt oss nu ta itu med den tidigare uppdateringen från en utvald frågelinje för rad.,
Vi har skrivit personstabellen efter sammanslagningen eftersom det är vår måltabell, som vi vill uppdatera, och vi gav per alias till den för att kunna använda resten av frågan.,
After the USING statement, we have specified the source table.
med hjälp av denna syntax definieras kopplingsförhållandet mellan mål-och källtabellen.
i den sista raden i frågan valde vi manipulationsmetoden för de matchade raderna. Individuellt för den här frågan har vi valt uppdateringsmetoden för matchade rader i måltabellen. Slutligen lade vi till semikolon-tecknet (;) eftersom SAMMANFOGNINGSDEKLARATIONERNA måste sluta med semikolon-tecknen. uppdatera från SELECT: subquery Methoden subquery är en interiörfråga som kan användas inuti DML-satserna (välj, infoga, uppdatera och ta bort)., Den viktigaste egenskapen hos subquery är, de kan endast utföras med den externa frågan. subquery-metoden är den mycket grundläggande och enkla metoden för att uppdatera befintliga data från andra tabelldata. Den märkbara skillnaden i den här metoden är, det kan vara ett bekvämt sätt att uppdatera en kolumn för tabellerna som har ett litet antal rader. Nu ska vi utföra följande fråga och sedan analysera den.,
|