Stellen Sie mir hier Ihre Fragen zu SQL-Abfragen in Microsoft SQL Server oder anderen Datenbanken. Senden Sie mir Ihre Frage einfach per E-Mail an frage@jantrummel.de.
Ich werde alle Fragen selbstverständlich anonymisiert veröffentlichen, sodass keine Rückschlüsse auf Sie, Ihr Unternehmen oder Ihre Daten gezogen werden können.
Dieser Service ist für Sie kostenfrei!
Fragen aus dem April 2024
Frage zu meinem Video "Tutorial Gespeicherte Prozeduren im MS SQL Server" auf YouTube
Frage vom 10.04.2024
Hi Herr Trummel, wie kann ich bearbeitete gespeicherte Prozeduren speichern?
Antwort
Gehen wir einmal davon aus, dass ich diese Prozedur erstellt habe:
CREATE PROCEDURE uspPersonen
@varLastName VARCHAR(50)
AS
SELECT *
FROM [Person].[Person]
WHERE [LastName] LIKE @varLastName;
Nun fällt mir auf, dass ich in der WHERE-Klausel beim LIKE die Prozentzeichen vergessen habe. Ohne die Prozentzeichen kann ich keine ungefähre Suche durchführen. Ich müsste den Nachnamen (LastName) genauso eingeben, wie er in der Tabelle steht.
Ich will die Prozedur nun ändern. Dafür ändere ich das Schlüsselwort CREATE ganz am Anfang des Anweisung um in ein ALTER. Dadurch wird der Code zu einer Änderungsanweisung:
ALTER PROCEDURE uspPersonen
@varLastName VARCHAR(50)
AS
SELECT *
FROM [Person].[Person]
WHERE [LastName] LIKE '%' + @varLastName + '%';
Ich führe den Code nun noch mit F5 aus und schon ist die Prozedur geändert.
Fragen aus dem August 2023
Abfrage auf anderen SQL Server
Frage vom 28.08.2023
Kann man in einem SQL-Befehl auf Datenbanken in anderen SQL Servern zugreifen?
Antwort
Ich habe ein wenig recherchiert und herausgefunden, dass dies über sogenannte Verbindungserver möglich ist.
Hier ein Auszug aus der Microsoft Hilfe:
Mithilfe von Verbindungsservern können SQL Server-Datenbank-Engine und Verwaltete Azure SQL-Instanz Daten aus Remotedatenquellen lesen und Befehle für Remotedatenbankserver (z. B. OLE DB-Datenquellen) außerhalb der Instanz von SQL Server ausführen. Normalerweise werden Verbindungsserver so konfiguriert, dass die Datenbank-Engine eine Transact-SQL-Anweisung ausführen kann, die Tabellen in einer anderen Instanz von SQL Server oder einem anderen Datenbankprodukt wie Oracle enthält. Viele Typen von OLE DB-Datenquellen können als Verbindungsserver konfiguriert werden, darunter Datenbank-Drittanbieter und Azure Cosmos DB.
Microsoft. Verbindungsserver (Datenbank-Engine). https://learn.microsoft.com/de-de/sql/relational-databases/linked-servers/linked-servers-database-engine?view=sql-server-ver16 Abgerufen am 02.09.2023
Der Zugriff erfolgt, wenn der Verbindungserver eingerichtet ist, über einen 4-teiligen Namen in folgender Form:
SELECT name FROM [SRVR002\ACCTG].master.sys.databases;
Bezüglich der Windows-Authentifizierung habe ich über ChatGPT folgendes herausgefunden:
Wenn Sie Windows-Authentifizierung verwenden, stellen Sie sicher, dass das Konto, unter dem Sie angemeldet sind, Zugriff auf beide Server hat. Bei der Einrichtung des verknüpften Servers können Sie angeben, welche Art von Authentifizierung verwendet werden soll.
ChatGPT. Frage gestellt am 02.09.2023
Fragen aus dem März 2023
SQL Unterabfrage Probl
Hallo Herr Trummel
ich hoffe es geht Ihnen gut.
Sehr wahrscheinlich haben wir die folgende frage bereits in ihrem Kurs Anfang des letzten Jahres gehabt. Ich habe folgendes Problem:
Ich möchte aus der Datenbank ... zusätzlich zu den bereits angezeigten Zahlen aus Monat 1 bis 12 noch zusätzlich als eigene Spalte die entsprechenden Amount_Balance aus Monat 0 (EB/SALDO).
Hier das Beispiel wie wir es bisher händisch in EXCEL erstellt haben.
Konto | Konto Bezeichnung | EB/SALDO | Sollsaldo | Habensaldo | Saldo |
503014 | xxxx | 6733248,42 | 0,00 | 0,00 | 6733248,42 |
503016 | xxxx | 228950,06 | 115706,84 | 115706,84 | 228950,06 |
Antwort
Gehen Sie von folgenden Daten in der Tabelle Buchhaltung aus:
Ich nutze jeweils 2 Unterabfragen, die ich über einen INNER JOIN verbinde.
In der Unterabfrage Daten filtere ich auf die Monate 1 - 12.
In der Unterabfrage Monat_0 filtere ich auf den Monat 0. Aus dieser frage ich nur die Spalte Saldo ab.
Die Abfragen verbinde ich jeweils über die KontoNr.
SELECT
Daten.KontoNr, Daten.Konto, Daten.Soll, Daten.Haben, Daten.Saldo,
Monat_0.Saldo AS 'EB/SALDO'
FROM
(
SELECT
KontoNr,
Konto,
SUM(Soll) AS Soll,
SUM(Haben) AS Haben,
SUM(Saldo) AS Saldo
FROM
Buchhaltung
WHERE
Jahr = 2022 AND
Monat BETWEEN 1 AND 12
GROUP BY
KontoNr, Konto
) AS Daten
INNER JOIN
(
SELECT
KontoNr,
Konto,
SUM(Saldo) AS Saldo
FROM
Buchhaltung
WHERE
Jahr = 2022 AND
Monat = 0
GROUP BY
KontoNr, Konto
) AS Monat_0
ON
Monat_0.KontoNr = Daten.KontoNr
ORDER BY
Daten.Konto;
Hinweis: SQL-Code stammt von MS SQL Server.
Hier das Abfrageergebnis: