Werden temporäre SQL Server-Tabellen (mit dem Präfix #
) in LocalDB-Instanzen unterstützt?
Werden temporäre SQL Server-Tabellen (mit dem Präfix #
) in LocalDB-Instanzen unterstützt?
Antworten:
Ich kann nicht für alle Versionen antworten, aber für SQL Server 2012 bis SQL Server 2017 bin ich sicher, dass sie unterstützt werden
LocalDB verfügt über dieselben Programmierfunktionen wie SQL Server Express.
SQL Server Express LocalDB, eine kompakte Version von Express, die alle Programmierfunktionen bietet, jedoch im Benutzermodus ausgeführt wird und eine schnelle Installation ohne Konfiguration sowie eine kurze Liste der Voraussetzungen bietet.
Aufbauend auf dem vorherigen Punkt für die SQL Server Express 2012 T-SQL-Syntax
Express unterstützt dieselben T-SQL-Sprachelemente, die Sie in jeder Edition von SQL Server finden. Sie können nicht nur Sprachabfragen zur Datenmanipulation für die Datenbank ausgeben, sondern auch Sprachanweisungen für die Datendefinition ausführen, um Objekte wie Ansichten, Trigger, Cursor und gespeicherte Prozeduren zu erstellen
Testen (SQL Server 2017)
USE testdb
GO
CREATE TABLE #temp (id int , value nvarchar(255));
INSERT INTO #temp( id ,value)
SELECT 5, 'bla';
SELECT * FROM #temp;
Ergebnis
id value
5 bla
Die temporäre Tabelle funktioniert auch, wenn der Kompatibilitätsmodus der Datenbank auf 100 (2008) geändert wird.
Ja, alle Formen temporärer Objekte (lokale temporäre Tabellen, globale temporäre Tabellen, Tabellenvariablen, lokale temporäre gespeicherte Prozeduren und globale temporäre gespeicherte Prozeduren) sind in allen Versionen von SQL Server Express LocalDB verfügbar.
Ich habe den folgenden einfachen Test für jeden dieser 5 Objekttypen in den Versionen 2012, 2014, 2016 und 2017 durchgeführt und keine Fehler erhalten.
CREATE TABLE #LocalTempTable (Col1 INT);
SELECT * FROM #LocalTempTable;
CREATE TABLE ##GlobalTempTable (Col1 INT);
SELECT * FROM ##GlobalTempTable;
DECLARE @TableVariable TABLE (Col1 INT);
SELECT * FROM @TableVariable;
GO
CREATE PROCEDURE #LocalTempProc
AS
SELECT 1;
GO
EXEC #LocalTempProc;
GO
CREATE PROCEDURE ##GlobalTempProc
AS
SELECT 2;
GO
EXEC ##GlobalTempProc;
Außerdem würde SQL Server wahrscheinlich nicht einmal gestartet, wenn diese nicht verfügbar wären, da sie in gespeicherten Systemprozeduren, Funktionen msdb
usw. verwendet werden.
Ja, Localdb unterstützt temporäre Tabellen.
USE [test];
GO
CREATE TABLE #mytemp
(
id int,
foo int,
bar int
);
GO
SELECT
*
FROM
tempdb.INFORMATION_SCHEMA.TABLES;
GO
DROP TABLE #mytemp;
GO
Kehrt zurück:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
---------------- ---------------- ------------------------------------ ----------
tempdb dbo #mytemp________________00000000000A BASE TABLE
Und abfragen sys.databases
:
SELECT
name,
database_id
FROM
sys.databases;
Gibt dieselbe Systemdatenbankstruktur zurück.
name database_id
--------- -----------
master 1
tempdb 2
model 3
msdb 4
test 5
Stimmen Sie mit @RandiVertongen überein.
Die LocalDB- Installation kopiert einen minimalen Satz von Dateien, die zum Starten des SQL Server-Datenbankmoduls erforderlich sind. Sobald LocalDB installiert ist, können Sie eine Verbindung mit einer speziellen Verbindungszeichenfolge herstellen. Beim Herstellen einer Verbindung wird die erforderliche SQL Server-Infrastruktur automatisch erstellt und gestartet, sodass die Anwendung die Datenbank ohne komplexe Konfigurationsaufgaben verwenden kann. Mit den Entwicklertools können Entwickler ein SQL Server-Datenbankmodul bereitstellen, mit dem sie Transact-SQL-Code schreiben und testen können, ohne eine vollständige Serverinstanz von SQL Server verwalten zu müssen.
Weitere Informationen über LocalDB verweisen offiziellen Link Quelle
Beachten Sie, dass es Einschränkungen gibt:
1) LocalDB kann kein Merge-Replikations-Abonnent sein.
2) LocalDB unterstützt FILESTREAM nicht.
3) LocalDB erlaubt nur lokale Warteschlangen für Service Broker.
4) Eine Instanz von LocalDB, die den integrierten Konten wie NT AUTHORITY \ SYSTEM gehört, kann aufgrund der Umleitung des Windows-Dateisystems Probleme mit der Verwaltbarkeit haben. Verwenden Sie stattdessen ein normales Windows-Konto als Eigentümer.
Ich hoffe das hilft!