sql >> Database >  >> RDS >> Sqlserver

Inleiding tot tijdelijke tabellen in SQL Server

Een tijdelijke tabel in SQL Server is, zoals de naam al doet vermoeden, een databasetabel die tijdelijk op de databaseserver aanwezig is. Een tijdelijke tabel slaat een subset van gegevens uit een normale tabel op voor een bepaalde periode.

Tijdelijke tabellen zijn met name handig wanneer u een groot aantal records in een tabel hebt en u herhaaldelijk moet communiceren met een kleine subset van die records. In dergelijke gevallen kunt u in plaats van de gegevens steeds opnieuw te filteren om de subset op te halen, de gegevens één keer filteren en opslaan in een tijdelijke tabel. U kunt dan uw query's uitvoeren op die tijdelijke tabel. Tijdelijke tabellen worden opgeslagen in "tempdb", een systeemdatabase. Laten we eens kijken hoe u tijdelijke gegevens in een eenvoudig scenario kunt gebruiken.

De gegevens voorbereiden

Laten we eerst wat dummy-gegevens voorbereiden. We zullen deze gegevens gebruiken om tijdelijke tabellen te maken.

Voer het volgende script uit op uw databaseserver.

CREATE DATABASE schooldb

CREATE TABLE student
(
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    gender VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    total_score INT NOT NULL,
    
 )


INSERT INTO student 

VALUES (1, 'Jolly', 'Female', 20, 500), 
(2, 'Jon', 'Male', 22, 545), 
(3, 'Sara', 'Female', 25, 600), 
(4, 'Laura', 'Female', 18, 400), 
(5, 'Alan', 'Male', 20, 500), 
(6, 'Kate', 'Female', 22, 500), 
(7, 'Joseph', 'Male', 18, 643), 
(8, 'Mice', 'Male', 23, 543), 
(9, 'Wise', 'Male', 21, 499), 
(10, 'Elis', 'Female', 27, 400);

Het bovenstaande SQL-script creëert een database 'schooldb'. In deze database wordt een tabel met de naam 'student' gemaakt en worden enkele dummygegevens aan de tabel toegevoegd.

Een tijdelijke tabel maken

Er zijn twee methoden om tijdelijke tabellen te maken.

Methode 1

De eenvoudigste manier om een ​​tijdelijke tabel te maken, is door een INTO-instructie te gebruiken binnen een SELECT-query. Laten we een tijdelijke tabel maken die de naam, leeftijd en geslacht bevat van alle mannelijke studentenrecords uit de studententabel.

USE schooldb;

SELECT name, age, gender
INTO #MaleStudents
FROM student
WHERE gender = 'Male'

Kijk eens naar de bovenstaande vraag. Hier hebben we een tijdelijke tabel "#MaleStudents" gemaakt waarin de naam, leeftijd en geslacht van alle mannelijke studentenrecords uit de studententabel worden opgeslagen. Om een ​​tijdelijke tabel te definiëren, gebruiken we het INTO-statement na het SELECT-statement. De naam van een tijdelijke tabel moet beginnen met een hekje (#).

Nu, om te zien waar deze tabel bestaat; ga naar "Objectverkenner -> Databases -> Systeemdatabases-> tempdb -> Tijdelijke tabellen". U ziet uw tijdelijke tabelnaam samen met de identifier. Bekijk de volgende afbeelding:

U moet zich afvragen wat de "00000000000006" aan het einde van de tabelnaam is. Dit is een unieke identificatie. Meerdere databaseverbindingen kunnen tijdelijke tabellen maken met dezelfde naam. Om onderscheid te maken tussen de tijdelijke tabellen die door verschillende verbindingen zijn gemaakt, voegt de databaseserver deze unieke id aan het einde automatisch toe.

U kunt bewerkingen op de tijdelijke tabel uitvoeren via dezelfde verbinding waarmee deze is gemaakt. Voer daarom in hetzelfde queryvenster dat de tabel "#MaleStudents" heeft gemaakt de volgende query uit.

SELECT * FROM #MaleStudents

Sindsdien bevat de tabel #MaleStudents de naam, leeftijd en het geslacht van alle mannelijke studenten. De bovenstaande zoekopdracht zal de volgende resultaten opleveren.

[tabel id=15/]

Om een ​​nieuwe verbinding tot stand te brengen, kunt u eenvoudig een nieuw queryvenster openen in “SQL Server Management Studio”. Houd nu de vorige verbinding open en maak een andere "MaleStudents"-tabel met methode 2 in een nieuw queryvenster (nieuwe verbinding).

Methode 2

De tweede methode is vergelijkbaar met het maken van normale tabellen. Kijk eens naar de volgende vraag. Ook hier zullen we de tijdelijke tabel #MaleStudents maken. Onthoud dat deze query moet worden uitgevoerd door een nieuwe verbinding.

USE schooldb;

CREATE TABLE #MaleStudents
(
	name VARCHAR(50),
	age int,
	gender VARCHAR (50)

)

INSERT INTO #MaleStudents
SELECT name, age, gender
FROM student
WHERE gender = 'Male'

Als u nu de bovenstaande query uitvoert, zou u twee #MaleStudents tijdelijke tabellen met verschillende unieke identifiers in de tempdb moeten zien. Dit komt omdat deze twee tabellen zijn gemaakt door twee verschillende verbindingen. Bekijk de volgende schermafbeelding.

Globale tijdelijke tabellen

Het is relevant om hier te vermelden dat een tijdelijke tabel alleen toegankelijk is voor de verbinding die die tijdelijke tabel heeft gemaakt. Het is niet toegankelijk voor andere verbindingen. We kunnen echter tijdelijke tabellen maken die toegankelijk zijn voor alle open verbindingen. Dergelijke tijdelijke tabellen worden globale tijdelijke tabellen genoemd. De naam van de globale tijdelijke tabel begint met een dubbel hekje (##). Laten we een globale tijdelijke tabel maken die records bevat van alle vrouwelijke studenten uit de studententafel.

USE schooldb;

SELECT name, age, gender
INTO ##FemaleStudents
FROM student
WHERE gender = 'Female'

Nu heb je toegang tot de ##FemaleStudents-tabel vanuit elk van de open verbindingen.

Een tijdelijke tabel verwijderen

Er zijn twee manieren om tijdelijke tabellen in SQL Server te verwijderen:automatisch verwijderen en handmatig verwijderen.

Automatisch verwijderen

Een tijdelijke tabel wordt automatisch verwijderd wanneer de verbinding die de tabel heeft gemaakt, wordt gesloten. Als u het queryvenster sluit waarmee de tijdelijke tabel is gemaakt, wordt de tabel ook gesloten zonder de wijzigingen op te slaan. Als een verbinding enkele query's uitvoert op de globale tabel, moeten die query's eerst worden voltooid voordat de globale tabel wordt verwijderd.

Handmatige tabelverwijdering

U kunt handmatig een tabel verwijderen zonder een verbinding te verbreken met behulp van de DROP TABLE-instructie. Onthoud echter dat de instructie moet worden uitgevoerd door de verbinding die de tabel heeft gemaakt. Bekijk de volgende vraag:

DROP TABLE #MaleStudents

Dit is vergelijkbaar met het verwijderen van een normale tafel.

Tijdelijke tabellen en opgeslagen procedures

Eerder hebben we geleerd dat een tijdelijke tabel alleen lokaal toegankelijk is binnen de verbinding waarmee deze is gemaakt. Er is één uitzondering op die regel. Wanneer u opgeslagen procedures maakt, hebt u ook toegang tot tijdelijke tabellen in andere verbindingen.

Laten we twee opgeslagen procedures maken met twee verschillende verbindingen. De eerste opgeslagen procedure zal gegevens invoegen in de #MaleStudents-tabel, terwijl de tweede de gegevens uit de tabel zal selecteren.

Maak een nieuwe verbinding. Als u SQL Server Management Studio gebruikt, kunt u dit doen door een nieuw queryvenster te openen. Voer het volgende SQL-script uit in het nieuwe queryvenster.

Create Procedure spInsertStudent
    (@Name Varchar(50), @Age int,  @Gender Varchar(50))
As
Begin
    Insert Into #MaleStudents
    Values (@Name, @Age, @Gender)
End

We hebben nu een opgeslagen procedure gemaakt die een record invoegt in de tijdelijke tabel #MaleStudent. Merk op dat deze verbinding de #MaleStudent niet heeft gemaakt, maar we hebben er toegang toe door er een record in te voegen. Dit komt omdat u bij het maken van een opgeslagen procedure toegang hebt tot tijdelijke tabellen vanaf een andere verbinding dan degene die de tabel heeft gemaakt. Als u de bovenstaande query uitvoert, zult u zien dat SQL Server geen enkele fout zal genereren.

Open op dezelfde manier een nieuwe verbinding en maak daarin de volgende opgeslagen procedure aan:

CREATE PROCEDURE spListStudent
AS
BEGIN

	SELECT * FROM #MaleStudents
	ORDER BY name
END

De bovenstaande opgeslagen procedure selecteert alle records uit de tijdelijke tabel #MaleStudents. Ook hier hebben we toegang tot een tijdelijke tabel binnen een verbinding die de tabel niet heeft gemaakt.

Nu is hier het lastige deel. Hoewel u bij het maken van een opgeslagen procedure toegang hebt tot een tijdelijke tabel binnen een andere verbinding, kunt u geen toegang krijgen tot een tijdelijke tabel wanneer u een opgeslagen procedure binnen een andere verbinding "uitvoert". Om een ​​opgeslagen procedure uit te voeren die toegang heeft tot een tijdelijke tabel, moet u zich binnen de verbinding bevinden die de tijdelijke tabel heeft gemaakt.

Voer daarom de volgende query's uit binnen de verbinding die de tabel #MaleStudents heeft gemaakt.

EXECUTE spInsertStudent Bradley, 45, Male
Execute spListStudent

Hier voegt de eerste opgeslagen procedure een nieuw studentenrecord in met de naam:Bradley, leeftijd:45 en geslacht:Man in de tabel #MaleStudents. De tweede opgeslagen procedure selecteert alle records uit de #MaleStudents-tabel in oplopende volgorde van naam. De uitvoer van de bovenstaande opgeslagen procedures zal zijn:

[tabel id=16 /]

U kunt ons nieuw ingevoegde record duidelijk zien in de geselecteerde records hierboven.

Zie ook:

Prestaties van tabelvariabelen in SQL Server

Introductie van algemene tabelexpressies in SQL Server


  1. Hoe vindt u de MySQL-databaselocatie op uw harde schijf?

  2. Externe sleutel instellen met ander datatype

  3. Aan de slag met MariaDB met Docker, Java Spring en JDBC

  4. Verschil tussen database en schema