Det er meget gavnligt at gemme data i SQL Server temp tabeller snarere end at manipulere eller arbejde med faste borde. Lad os sige, at du vil have fuld DDL-eller DML-adgang til et bord, men ikke har det. Du kan bruge din eksisterende læseadgang til at trække dataene ind i en midlertidig s .l Server-tabel og foretage justeringer derfra. Eller du har ikke tilladelser til at oprette en tabel i den eksisterende database, du kan oprette en s .l Server temp-tabel, som du kan manipulere., Endelig kan du være i en situation, hvor du har brug for, at dataene kun skal være synlige i den aktuelle session.
s .l Server understøtter et par typer S .l Server temp tabeller, der kan være meget nyttige.
Før vi går videre, hvis du ønsker at følge sammen med en kode prøver, vil jeg foreslå at åbne SQL Server Management Studio:
Lokal SQL temp tabeller
Lokal SQL Server temp tabeller, der er oprettet ved hjælp af pund symbol eller “hashtag” efterfulgt af tabellen navn. For eksempel: #Table_name. S .l temp-tabeller oprettes i tempdb-databasen., En lokal s .l Server temp-tabel er kun synlig for den aktuelle session. Det kan ikke ses eller bruges af processer eller forespørgsler uden for den session, det er erklæret i.
Her er et hurtigt eksempel på at tage et resultatsæt og sætte det i en s .l Server temp-tabel.
en af de mest anvendte scenarier for S .l Server temp tabeller er inden for en løkke af en slags. For eksempel, du ønsker at behandle data for en s .l-sætning, og det du har brug for et sted at gemme elementer til din løkke til at læse igennem. Det giver en hurtig og effektiv måde at gøre det., Se kodeprøven ovenfor, din løkke kan nu henvise til S .l Server temp-tabellen og behandle de poster, der opfylder kriterierne for dit mål.
en anden grund til at bruge S .l Server temp tabeller er du har nogle krævende behandling at gøre i din s .l-sætning. Lad os sige, at du opretter en join, og hver gang du har brug for at trække poster fra dette resultat sæt det har at behandle denne join hele igen. Hvorfor ikke bare behandle dette resultat indstillet en gang og smide posterne i en s ?l temp-tabel? Derefter kan du få resten af S .l-sætningen til at henvise til S .l temp-bordnavnet., Dette sparer ikke kun på dyre forespørgselsbehandling, men det kan endda få din kode til at se lidt renere ud.
Der er et punkt, som jeg dog vil gøre. Hvis den session, vi arbejder i, har efterfølgende indlejrede sessioner, vil s .l Server temp-tabellerne være synlige i sessioner lavere i hierarkiet, men ikke over i hierarkiet. Tillad mig at visualisere dette.
i dette hurtige diagram oprettes en s .l temp-tabel i Session 2. Sessionerne under det (sessioner 3 og session 4) kan se s .l Server temp-tabellen., Men Session 1, som er over session 2, vil ikke være i stand til at se s .l Server temp-tabellen.
s .l temp-tabellen tabes eller ødelægges, når sessionen afbrydes. Mange gange vil du se udviklere bruge kommandoen “DROP #Table_Name” i slutningen af deres erklæring bare for at rydde op. Men det er helt op til dig og hvad du forsøger at opnå.,
Bemærk også, at I tilfælde af navnekonflikt (husk at s .l Server temp-tabeller er oprettet i tempdb) vil s .l server tilføje et suffiks til slutningen af tabelnavnet, så det er unikt i tempdb-databasen. Men denne proces er gennemsigtig for udvikleren / brugeren. Du kan bruge det samme navn, som du erklærede, da det er begrænset til den session.
globale s .l temp-tabeller
globale s .l temp-tabeller er nyttige, når du vil have, at resultatsættet er synligt for alle andre sessioner. Ingen grund til at opsætte tilladelser., Alle kan indsætte værdier, ændre eller hente poster fra tabellen. Bemærk også, at alle kan tabe bordet. Ligesom lokale s .l Server temp-tabeller tabes de, når sessionen afbrydes, og der er ikke længere flere henvisninger til tabellen. Du kan altid bruge kommandoen “DROP” til at rense den manuelt. Hvilket er noget, jeg vil anbefale.
for at oprette en global s .l temp-tabel skal du blot bruge to pund symboler foran bordnavnet. Eksempel: ##Global_Table_Name.,
tabelvariabler
tabelvariabler oprettes som enhver anden variabel ved hjælp af erklæringen. Mange mener, at tabelvariabler kun findes i hukommelsen, men det er simpelthen ikke sandt. De bor i tempdb databasen meget gerne lokale s .l Server temp tabeller. Ligesom lokale s .l temp-tabeller er tabelvariabler kun tilgængelige inden for den session, der oprettede dem. I modsætning til S .l temp-tabeller er tabelvariablen imidlertid kun tilgængelig inden for den aktuelle batch. De er ikke synlige uden for batchet, hvilket betyder, at begrebet sessionshierarki kan ignoreres noget.,
for så vidt angår ydeevne er tabelvariabler nyttige med små mængder data (som kun et par rækker). Ellers en s .l Server temp tabel er nyttig, når sigtning gennem store mængder data. Så for de fleste scripts vil du sandsynligvis se brugen af en s .l Server temp tabel i modsætning til en tabel variabel. For ikke at sige, at den ene er mere nyttig end den anden, det er bare du skal vælge det rigtige værktøj til jobbet.
Her er et hurtigt eksempel på Opsætning og brug af en tabelvariabel.,
Vi har oprettet en tabelvariabel, der indeholder oplysninger om de samlede mængder af et bestemt solgt produkt. Dette er et meget forenklet eksempel, og vi ville ikke bruge det, hvis det indeholdt mange rækker. Men hvis vi kun kiggede på et par produkter, kunne det virkelig godt. Når tabelvariablen er befolket, kan du derefter deltage i dette som en tabel til endnu en tabel og indsamle de oplysninger, du har brug for. Så der er meget fleksibilitet og gør det muligt for udvikleren at være ret kreativ.
også til sidst, hvad angår transaktioner på tabelvariabler., Hvis en udvikler ruller tilbage en transaktion, som omfatter ændringer i tabellen variabler, vil ændringerne i tabellen variabler inden for denne særlige transaktion forblive intakt. Det vil sige, andre dele af denne pågældende transaktion vil blive rullet tilbage, men alt, der refererer til tabelvariablen, vil ikke, medmindre den del af dit script er forkert.,
- Forfatter
- Seneste Indlæg
han startede sin IT-karriere i helpdesk worldorld og flyttede til sidst ind i netværks – /systemadministratorsiden af tingene. Efter nogen tid udviklede han en kærlighed til at arbejde med databaser (hovedsageligt s .l Server) og har fokuseret sin karriere på det i de sidste otte år., Han har arbejdet for forskellige brancher i både store og små miljøer alle med forskellige behov.
s .l Shack har givet ham en mulighed for at bidrage til et samfund, der har givet ham så meget gennem årene.,
Vis alle indlæg af Aamir Syed
- Er SQL Server Altid Krypteret, til følsomme data kryptering, lige til dit miljø – juli 27, 2018
- Use cases for Forespørgsel Butik i SQL Server – juli 18, 2018
- Ved at Bruge SQL-Temp Tabeller vs. Tabel Variabler – 21 februar 2017