Het is zeer nuttig om gegevens op te slaan in SQL Server temp tables in plaats van te manipuleren of te werken met permanente tabellen. Laten we zeggen dat je volledige DDL of DML toegang tot een tafel wilt, maar het niet hebt. U kunt uw bestaande leestoegang gebruiken om de gegevens in een SQL Server tijdelijke tabel te trekken en vanaf daar aanpassingen aan te brengen. Of u hebt geen machtigingen om een tabel in de bestaande database te maken, u kunt een SQL Server temp table maken die u kunt manipuleren., Tot slot kunt u zich in een situatie bevinden waarin u de gegevens alleen in de huidige sessie zichtbaar wilt maken.
SQL Server ondersteunt een paar typen SQL Server temp tables die zeer nuttig kunnen zijn.
voordat we verder gaan, stel ik voor om SQL Server Management Studio te openen:
lokale SQL temp tables
lokale SQL Server temp tables worden aangemaakt met het pound symbool of “hashtag” gevolgd door de tabelnaam. Bijvoorbeeld: # Table_name. SQL temp tabellen worden gemaakt in de tempdb database., Een lokale SQL Server temp table is alleen zichtbaar voor de huidige sessie. Het kan niet worden gezien of gebruikt door processen of query ‘ s buiten de sessie waarin het is gedeclareerd.
Hier is een snel voorbeeld van het nemen van een result set en het zetten in een SQL Server temp table.
een van de meest gebruikte scenario ‘ s voor SQL Server temp tables bevindt zich in een soort lus. U wilt bijvoorbeeld gegevens verwerken voor een SQL-statement en u hebt een plek nodig om items op te slaan zodat uw lus kan worden gelezen. Het biedt een snelle en efficiënte manier om dit te doen., Zie de code voorbeeld hierboven, uw loop kan nu verwijzen naar de SQL Server temp table en de records die voldoen aan de criteria van uw doel te verwerken.
een andere reden om SQL Server temp tables te gebruiken is dat je een aantal veeleisende verwerking te doen hebt in je SQL statement. Laten we zeggen dat je een join aanmaakt, en elke keer dat je records uit die resultaatset moet halen, moet het deze join helemaal opnieuw verwerken. Waarom niet gewoon verwerken dit resultaat set een keer en gooi de records in een SQL temp tabel? Dan kunt u de rest van het SQL statement verwijzen naar de SQL temp tabelnaam., Niet alleen bespaart dit op dure query verwerking, maar het kan zelfs uw code kijken Een beetje schoner.
er is echter een punt dat ik wil maken. Als de sessie waarin we werken volgende geneste sessies heeft, zullen de SQL Server temp tables zichtbaar zijn in sessies lager in de hiërarchie, maar niet hoger in de hiërarchie. Sta me toe dit te visualiseren.
in dit snelle diagram wordt een SQL temp tabel aangemaakt in Sessie 2. De sessies eronder (sessies 3 en sessie 4) kunnen de SQL Server temp table zien., Maar Sessie 1, die boven sessie 2 staat, zal niet in staat zijn om de SQL Server temp table te zien.
De SQL temp table wordt verwijderd of vernietigd zodra de sessie de verbinding verbreekt. Vaak zie je ontwikkelaars het “DROP #Table_Name” Commando aan het einde van hun statement gebruiken om op te ruimen. Maar het is geheel aan jou en wat je probeert te bereiken.,
merk ook op dat in het geval van een naamconflict (vergeet niet dat SQL Server temp tables worden aangemaakt in de tempdb) SQL server een achtervoegsel zal toevoegen aan het einde van de tabelnaam, zodat deze uniek is binnen de tempdb database. Maar dit proces is transparant voor de ontwikkelaar/gebruiker. Je kunt dezelfde naam gebruiken die je hebt opgegeven, omdat het beperkt is tot die sessie.
globale SQL temp tables
globale SQL temp tables zijn handig als u wilt dat het resultaat zichtbaar is voor alle andere sessies. Het is niet nodig om machtigingen in te stellen., Iedereen kan waarden invoegen, wijzigen of records uit de tabel ophalen. Merk ook op dat iedereen de tafel kan laten vallen. Net als lokale SQL Server temp tables, worden ze verwijderd zodra de sessie de verbinding verbreekt en zijn er geen verwijzingen meer naar de tabel. U kunt altijd gebruik maken van de & Amp; Quot; DROP & amp; quot; commando om het handmatig op te ruimen. Dat is iets dat ik zou aanraden.
om een globale SQL-temptabel aan te maken, gebruikt u gewoon twee pond symbolen voor de tabelnaam. Voorbeeld: # # Global_Table_Name.,
tabelvariabelen
tabelvariabelen worden net als elke andere variabele aangemaakt met behulp van het declaratie statement. Velen geloven dat tabel variabelen bestaan alleen in het geheugen, maar dat is gewoon niet waar. Ze bevinden zich in de tempdb database net als lokale SQL Server temp tables. Net als lokale SQL temp tables zijn tabelvariabelen alleen toegankelijk binnen de sessie die ze gemaakt heeft. Echter, in tegenstelling tot SQL temp tables is de tabel variabele alleen toegankelijk binnen de huidige batch. Ze zijn niet zichtbaar buiten de batch, wat betekent dat het concept van sessiehiërarchie enigszins kan worden genegeerd.,
Wat prestaties betreft zijn tabelvariabelen nuttig bij kleine hoeveelheden gegevens (zoals slechts een paar rijen). Anders is een SQL Server temp table handig bij het zeven door grote hoeveelheden data. Dus voor de meeste scripts zie je waarschijnlijk het gebruik van een SQL Server temp table in tegenstelling tot een tabel variabele. Om niet te zeggen dat de ene nuttiger is dan de andere, het is gewoon je moet het juiste gereedschap voor de baan te kiezen.
Hier is een snel voorbeeld van het opzetten en gebruiken van een tabel variabele.,
we hebben een tabel variabele gemaakt die informatie bevat over de totale hoeveelheden van een bepaald product dat wordt verkocht. Dit is een zeer vereenvoudigd voorbeeld, en we zouden het niet gebruiken als het veel rijen bevatte. Maar als we alleen maar kijken naar een paar producten dit kan echt goed. Zodra de tabel variabele is ingevuld kunt u deze vervolgens als een tabel aan nog een andere tabel toevoegen en alle informatie verzamelen die u nodig hebt. Dus er is veel flexibiliteit en stelt de ontwikkelaar in staat om heel creatief te zijn.
ook, in een laatste noot, in termen van transacties op tabelvariabelen., Als een ontwikkelaar een transactie terugrolt die wijzigingen in de tabelvariabelen bevat, blijven de wijzigingen in de tabelvariabelen binnen deze specifieke transactie intact. Dat wil zeggen, andere delen van deze transactie in kwestie zullen worden teruggedraaid, maar alles wat verwijst naar de tabel variabele zal niet, tenzij dat deel van uw script is in fout.,
- Auteur
- Laatste Berichten
SQL Shack heeft hem een kans gegeven om bij te dragen aan een gemeenschap die hem door de jaren heen zoveel heeft gegeven.,
Bekijk alle berichten van Aamir Syed
- SQL Server Altijd Gecodeerd, voor gevoelige data encryptie, voor uw omgeving – juli 27, 2018
- Gebruik van de gevallen voor Query Opslaan in SQL Server – juli 18, 2018
- Wanneer u SQL Temp Tables vs. Tabel Variabelen, 21 februari 2017