Renaming of SQL-Server

If you have to rename an existing server running MS SQL-Server is more complicated than you might think. Just renaming the server is not enough.

Especially renaming the running SQL-Server is at first challenging. You cannot just open the properties and do something like “rename”. In order to rename a SQL-Server you have to execute a SQL-Statement:

 USE master
 EXEC sp_dropserver 'old-servername'
 GO
 EXEC sp_addserver 'new-servername', 'LOCAL'
 GO

Especially tricky is, that Microsofts documentation was missing the LOCAL part of the sp_addserver statement.

Link: BUG: “Renaming A Server” Topic in SQL Server Books Online is Incomplete

Groß/Kleinschreibung / Collations

Beim SQL-Server 2000 wird standardmäßig bei Tabellen- und Spaltennamen zwischen Groß- und Kleinschreibung unterschieden.

Hat man bereits bestehende SQL-Befehle oder wird dies nicht benötigt, kann man diese Option auch abstellen. Man hat die Möglichkeit beim Erstellen der Datenbank den Collation Name anzugeben. Eine Collation ist in erster Linie für die verwendete Sprache zuständig. Zusätzlich kann man aber auch angeben, ob man zwischen Groß- und Kleinschreibung unterscheidet (CASE-SENSITIVE = CS) oder nicht (CASE-INSENSITIVE = CI). Beim Erzeugen einer neuen Datenbank kann man bei den Database Properties/General unter Collation name die entsprechende Collation auswählen: zwei Beispiele:

 SQL_Latin1_General_CP1_CI_AI (Latin1, case insensitive)
 SQL_Latin1_General_CP1_CS_AS (Latin1, case sensitive)

Eine Übersicht über sämtliche Collations, findet man im MSDN.

Bei einer bestehenden Datenbank kann man über den “alter”-Befehl, die Collation ändern:

 alter database TestDB collate SQL_Latin1_General_Cp850_CI_AS

Verwendung von Datumsformaten

Bei multilingual eingerichteten Server und Anwendungen gibt es besonders bei der Nutzung von Datumsformaten in SQL-Statements einiges zu beachten, damit dieser in jeder Sprache eindeutig funktionieren.

Die Schreibweise date = yyyymmdd bzw. datetime yyyymmdd hh:MM:ss ist vollkommen sprachneutral und sollte daher grundsätzlich verwendet werden. Alternativ kann auch die komplexere Schreibweise mit den geschweiften Klammern genutzt werden.

Alle anderen Schreiben (insbesondere yyyy-mm-dd) sind zu vermeiden, da diese je nach Spracheinstellung des Servers, des SQL-Servers und des SQL-Users nur Problemen führen kann.

Link: Der ultimative Guide für die Datetime Datentypen

Sprachunabhängig Datumsformate

Bei Datumsvergleichen zählen immer die Spracheinstellungen des SQL-Servers bzw. die Sprache des SQL-Users.

Es gibt aber auch die Möglichkeit unabhängig von den Spracheinstellungen im SQL-Server Datumsvergleiche zu machen. Dabei werden zwei verschiedene Datumsarten unterschieden: Datumswerte und Zeitstempel (Timestamps).

Die Formartierung sieht wie folgt aus:

  • Datumswert: {d "2000-06-02"}
  • Zeitstempel: {ts "2000-06-02 12:00:00.000"}

Diese Formate können ganz normal in einem SQL-Statement benutzt werden.

Beispiel:

 select * from tabelle where datum between {d ' 2000-06-01'} and {d ' 2000-06-05'}

Import von Binär-Daten in den MS SQL-Server mit ADO

Der hier beschriebene Source-Code bezieht sich auf die Verwendung von VBScript. Die Verwendung in VB oder VBA ist analog.

Um Dateien als Binary importieren zu können muss zunächst eine Stream-Objekt erstellt werden, welches die zu importierende Datei repräsentiert:

 Dim strFile
 strFile = "C:\Temp\Test.jpg"
 Dim objStream
 Set objStream = CreateObject("ADODB.Stream")
 objStream.Open
 objStream.Type = adTypeBinary
 objStream.LoadFromFile(strFile)

Anschließend kann eine normale ADO Verbindung mit dem SQL-Server aufgebaut werden. In diesem Fall wird mit Windows-Authentifizierung eine Verbindung mit der Datenbank Test gemacht:

 Dim cnn, rst
 Set cnn = CreateObject("ADODB.Connection")
 cnn.Open "Provider=SQLOLEDB.1; Data Source=(local); " & "Integrated Security=SSPI;Initial Catalog=Test;"
 Set rst = CreateObject("ADODB.Recordset")

In dieser Datenbank ist eine Tabelle Table1 vorhanden, die über zwei Spalten verfügt: FileName und Bild, wobei Bild vom Datentyp image ist. Der Import wird in eine Transaktion gekapselt:

 cnn.BeginTrans
 rst.Open "Table1", cnn, adOpenForwardOnly, adLockOptimistic
 rst.AddNew
 rst.Fields("FileName").Value = strFile
 rst.Fields("Bild").AppendChunk(objStream.Read)
 rst.Update
 rst.close
 cnn.CommitTrans

Schließlich werden noch alle Objekte wieder freigegeben:

 ' Clean-Up
 objStream.Close
 cnn.Close
 Set rst = Nothing
 Set objStream = Nothing
 Set cnn = Nothing

Das komplette Skript kann auch als VBS-Datei gedownloaded werden.

Link: How to load a Binary File into an Oracle BLOB with ADO