det är mycket fördelaktigt att lagra data i SQL Server temp tabeller i stället för att manipulera eller arbeta med permanenta tabeller. Låt oss säga att du vill ha full DDL eller DML tillgång till ett bord, men inte har det. Du kan använda din befintliga läsåtkomst för att dra data till en SQL Server temporär tabell och göra justeringar därifrån. Eller om du inte har behörighet att skapa en tabell i den befintliga databasen kan du skapa en SQL Server temp-tabell som du kan manipulera., Slutligen kan du vara i en situation där du behöver data för att vara synlig endast i den aktuella sessionen.
SQL Server stöder några typer av SQL Server temp tabeller som kan vara till stor hjälp.
innan vi fortsätter, om du vill följa med några kodexempel, föreslår jag att du öppnar SQL Server Management Studio:
lokala SQL temp-tabeller
lokala SQL Server temp-tabeller skapas med hjälp av pound-symbolen eller ”hashtag” följt av tabellnamnet. Till exempel: #Table_name. SQL temp tabeller skapas i tempdb-databas., En lokal SQL Server temp-tabell är endast synlig för den aktuella sessionen. Det kan inte ses eller användas av processer eller frågor utanför sessionen det deklareras i.
här är ett snabbt exempel på att ta en resultatuppsättning och sätta den i en SQL Server temp tabell.
en av de vanligaste scenarierna för SQL Server temp-tabeller ligger inom en slinga av något slag. Till exempel, du vill bearbeta data för en SQL-sats och det du behöver en plats att lagra objekt för din loop att läsa igenom. Det ger ett snabbt och effektivt sätt att göra det., Se kodexempel ovan, kan din loop nu referera till SQL Server temp-tabellen och bearbeta de poster som uppfyller kriterierna för ditt mål.
en annan anledning att använda SQL Server temp tabeller är att du har några krävande bearbetning att göra i din sql-sats. Låt oss säga att du skapar en koppling, och varje gång du behöver dra poster från det resultatet som det måste bearbeta detta gå om igen. Varför inte bara bearbeta det här resultatet en gång och kasta posterna i en SQL temp-tabell? Då kan du ha resten av sql-satsen hänvisar till SQL temp tabellnamn., Inte bara sparar detta på dyr fråga bearbetning, men det kan även göra din kod ser lite renare.
det finns en punkt som jag vill göra dock. Om sessionen som vi arbetar i har efterföljande kapslade sessioner kommer SQL Server temp-tabellerna att synas i sessioner lägre i hierarkin, men inte ovan i hierarkin. Låt mig visualisera det här.
i det här snabbdiagrammet skapas en SQL temp-tabell i Session 2. Sessionerna under den (sessioner 3 och session 4) kan se SQL Server temp tabell., Men Session 1, som är ovan session 2, kommer inte att kunna se SQL Server temp tabell.
SQL temp-tabellen tas bort eller förstörs när sessionen kopplas bort. Många gånger ser du utvecklare använder kommandot” DROP #Table_Name ” i slutet av deras uttalande bara för att städa upp. Men det är helt upp till dig och vad du försöker åstadkomma.,
Observera också att i händelse av namnkonflikt (kom ihåg att SQL Server temp-tabeller skapas i tempdb) kommer SQL server att lägga till ett suffix till slutet av tabellnamnet så att det är unikt i tempdb-databasen. Men denna process är transparent för utvecklaren / användaren. Du kan använda samma namn som du förklarade som det är begränsat till den sessionen.
globala SQL temp-tabeller
globala SQL temp-tabeller är användbara när du vill att resultatet ska vara synligt för alla andra sessioner. Du behöver inte konfigurera behörigheter., Vem som helst kan infoga värden, ändra eller hämta poster från tabellen. Observera också att vem som helst kan släppa bordet. Liksom lokala SQL Server temp tabeller, de släpps när sessionen kopplar och det finns inte längre några fler referenser till tabellen. Du kan alltid använda kommandot ”DROP” för att städa upp det manuellt. Vilket är något som jag skulle rekommendera.
för att skapa en global SQL temp-tabell använder du helt enkelt två pund symboler framför tabellnamnet. Exempel: # # Global_Table_Name.,
tabellvariabler
tabellvariabler skapas som alla andra variabler, med hjälp av DEKLARATIONSDEKLARATIONEN. Många tror att tabellvariabler endast finns i minnet, men det är helt enkelt inte sant. De bor i tempdb-databasen ungefär som lokala SQL Server temp-tabeller. Liksom lokala SQL temp-tabeller är tabellvariabler endast tillgängliga inom sessionen som skapade dem. Till skillnad från SQL temp-tabeller är tabellvariabeln endast tillgänglig inom den aktuella satsen. De är inte synliga utanför satsen, vilket innebär att begreppet sessionshierarki kan ignoreras något.,
När det gäller prestanda är tabellvariabler Användbara med små mängder data (som bara några rader). Annars är en SQL Server temp tabell användbar när siktning genom stora mängder data. Så för de flesta skript kommer du sannolikt att se användningen av en SQL Server temp-tabell i motsats till en tabellvariabel. För att inte säga att man är mer användbar än den andra, det är bara du måste välja rätt verktyg för jobbet.
här är ett snabbt exempel på hur du konfigurerar och använder en tabellvariabel.,
Vi har skapat en tabellvariabel som innehåller information om totala mängder av en viss produkt som säljs. Detta är ett mycket förenklat exempel, och vi skulle inte använda det om det innehöll många rader. Men om vi bara tittade på några produkter kunde det här verkligen bra. När tabellen variabeln fylls i kan du sedan gå med i detta som en tabell till ännu en tabell och samla all information du behöver. Så det finns mycket flexibilitet och gör att utvecklaren kan vara ganska kreativ.
också, på en sista anteckning, när det gäller transaktioner på tabellvariabler., Om en utvecklare rullar tillbaka en transaktion som innehåller ändringar i tabellvariablerna, kommer ändringarna i tabellvariablerna inom denna transaktion att förbli intakta. Det vill säga, andra delar av denna transaktion i fråga kommer att rullas tillbaka, men allt som refererar till tabellvariabeln kommer inte, om inte den delen av ditt skript är fel.,
- författare
- Senaste inlägg
han började sin IT-karriär i helpdesk världen och så småningom flyttade in i nätverk/systemadministratör sidan av saker. Efter en tid utvecklade han en tillgivenhet för att arbeta med databaser (främst SQL Server) och har fokuserat sin karriär på det under de senaste åtta åren., Han har arbetat för olika branscher i både stora och små miljöer med olika behov.
SQL Shack har gett honom möjlighet att bidra till en gemenskap som har gett honom så mycket genom åren.,
Visa alla inlägg av Aamir Syed
- är SQL Server alltid krypterad, för känslig datakryptering, rätt för din miljö – 27 juli 2018
- använd fall för Query Store i SQL Server – 18 juli 2018
- när du ska använda SQL Temp tables vs. Table variables – februari 21, 2017