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…“.

Neuen Verbindungsserver anlegen
Neuen Verbindungsserver anlegen

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.

Auswahl des Verbindungsservers
Verbindungsserver auswählen

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.

Konfigurieren Sie die Berechtigungen, mit denen einzelne oder alle Anmeldungen auf den Verbindungsserver zugreifen
Konfigurieren Sie die Berechtigungen, mit denen einzelne oder alle Anmeldungen auf den Verbindungsserver zugreifen

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:

DBCC reseed: id  bei 250 fortsetzen
DBCC reseed: id bei 250 fortsetzen

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.

Primärschlüssel zurücksetzen nach DELETE
Primärschlüssel zurücksetzen nach DELETE