Die dateadd-Funktion von T-SQL ermöglicht es uns den Jahresanteil eines datetime-Felds oder einer datetime-Variable zu modifizieren, ohne dabei die anderen Werte für Tag, Monat oder den Uhrzeitanteil zu verändern.
Im folgenden Beispiel sei das Vorgehen illustriert:
Microsoft SQL-Server Verbindungsserver einrichten
In Unternehmen sind häufig Insellösungen anzutreffen, deren Datenhaltung auf verschiedenen Microsoft SQL-Servern erfolgt. Ein häufiges Beispiel hier ist ein Warenwirtschaftssystem und ein Webshop, die sich weder eine gemeinsame Datenbank noch einen gemeinsamen SQL-Server teilen.
Neben der Synchronisation der Daten ist vor allem die zusammenhänge Auswertung der Datenquellen im Controlling eine häufige Anforderung. Um Daten aus Datenbanken von verschiedenen Microsoft SQL-Servern zusammenhängend darzustellen und diese als Datenquelle zum Beispiel in Excel verwenden zu können, wäre die Implementierung eines Data-Warehouse zwar formell der richtige Ansatz, jedoch scheidet dieser in Hinblick auf die damit verbunden Kosten vor allem für kleinere Mittelständler oftmals aus. Ebenso wenn ad hoc Auswertungen gefragt
Also probate Lösung, um die Anforderung der gemeinsamen Auswertbarkeit zu erfüllen, kann ein Microsoft SQL-Verbindungsserver eingerichtet werden. Gehen Sie dazu wie folgt vor:
Expandieren Sie im SQL Server Management Studio im Objektexplorer den Knoten Serverobjekte. Rufen Sie am Unterknoten das Kontextmenü auf und klicken auf „Neuer Verbindungsserver…“.
Im nun folgenden Dialog geben Sie den Namen des Verbindungsservers ein, unter dem dieser im Netzwerk zu erreichen ist. Wählen Sie als Servertyp „SQL Server“ aus.
Wählen Sie nun rechts die Seite „Sicherheit“ aus. Hier können Sie entweder lokalen Anmeldungen Anmeldungen auf dem Verbindungsserver zu ordnen. Oder einen für alle Anmeldungen gültigen Sicherheitskontext angeben. Wie im nachfolgendem Screenshot zu erkennen, habe ich keine dedizierte Anmeldungszuordnung vorgenommen, sondern jede Anmeldung am lokalen Server mit dem sa-Sicherheitskontext verknüpft. In der Praxis sind hier selbstverständlich das vorliegende Berechtigungsmodell zu beachten, da sonst mit jedem Login ein uneingeschränkter Zugriff auf den Verbindungsserver möglich wäre.
CSV-Dateien als Datenquelle für MS-SQL-Server nutzen
Gilt es Daten aus anderen Quellen in eine SQL-Datenbank zu übernehmen, so ist das CSV-Format häufig der kleinste gemeinsame Nenner. Der Microsoft SQL-Server bietet seit der Version 2008 bereits die Möglichkeit über einen BULK-INSERT Daten aus CSV-Dateien zu lesen.
BULK INSERT Adressen FROM 'C:\Daten\AdressenExport.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', ERRORFILE = 'C:\Daten\AdressenImportFehler.csv', TABLOCK )
Bei diesem Vorgehen ist es wichtig, dass die Anzahl und Reihenfolge der Spalten in der Datenbank der Reihenfolge der Spalten in der CSV-Datei entspricht.
Erklärung der Parameter:
FIRSTROW
- Ab dieser Zeile beginnen die Datensätze. Es wird bei 1 begonnen zu zählen, wenn also die CSV-Datei die Überschriften der Spaltenköpfe beinhaltet, ist hier 2 anzugeben.
FIELDTERMINATOR
- Hier ist das Trennzeichen zwischen den einzelnen Spalten in einfachen Hochkommas anzugeben, für gewöhnlich ‚;‘ oder ‚,‘.
ROWTERMINATOR
- Mit dieser Angabe wird das Zeichen angegeben, dass einen Zeilenwechsel und somit einen neuen Datensatz einleitet. Auch Kombinationen wie ‚\n\r‘ sind möglich.
ERRORFILE
- Mit diesen optionalen Parameter kann eine Datei angegeben werden, in der jene Datensätze gespeichert werden, die z.B. aufgrund der Überschreitung der Feldlänge oder der Auslassung eines Pflichtfeldes in der Datenbanktabelle nicht importiert werden können.
TABLOCK
- Sperrt die Tabelle während des Imports, was vor allem Performancevorteile mit sich bringen kann.
T-SQL Zeichenkette mit Datentyp text vergleichen
Je nachdem, wie eine Datenbank aufgebaut ist, kann es vorkommen, dass ein als varchar
oder nvarchar
geführtes Feld mit einem Feld vom Typ text verglichen werden muss.
Ein trivialer Versuch wie der folgende
SELECT * FROM Zeiterfassung WHERE UserName = 'TF'
wird mit nachfolgender Fehlermeldung quittiert:
The data types text and varchar are incompatible in the equal to operator.
Soll ein solcher Vergleich zu einem Resultat führen, so muss ein Datentyp in den anderen konvertiert werden, dabei ist jedoch darauf zu achten, dass der zu konvertierenden Datentyp die Feldlängen nicht überschreitet. Für gewöhnlich sollte jedoch ein convert(varchar(max),datenfeld)
ausreichend sein.
SELECT * FROM Zeiterfassung WHERE CONVERT(varchar(max),UserName) = 'TF'
T-SQL Primärschlüssel zurücksetzen
Mit Hilfe des DBCC CHECKIDENT
Befehls des MS SQL Servers lässt sich der Primärschlüssel mit Identitätsspezifikation einer Tabelle neu vergeben und steuern. Neben wir an, in einer Tabelle „Adresse“ sind hundert Datensätze enthalten, mit dem Primärschlüssel beginnend bei 1 und endend bei 100. Möchten wir nun, dass der nächste eingefügte Datensatz den Schlüssel 250 enthält, können wir dies mit folgenden Befehl erreichen:
Wenn man sich zum Beispiel innerhalb eines Unit-Tests auf Datensätze aus einer Datenbank beziehen muss, ist sicherzustellen, dass spezifische Datensätze über die gleichen Schlüssel zu erreichen sind. Wenn eine Tabelle nicht über TRUNCATE
zurückgesetzt werden kann, bleibt nur ein einfacher DELETE
. Mit einem anschließendem DBCC CHECKIDENT
Befehl, können dann die Schlüssel zurückgesetzt werden, um wie im Beispiel wieder ab Datensatz 250 fortfahren zu können.