Globale Variable in T-SQL

Frage: In SQL Server sollen globale Variablen definiert und in verschiedenen Gespeicherte Prozeduren genutzt werden. Lösung: Globale Variablen werden in SQL Server nicht unterstützt. Aber es gibt eine Alternative: Create Table GlobaleVariable ( Id int Not Null Primary Key, — Gängige Typen IntegerVariable int Null, StringVariable varchar(255) Null ) Go Insert Into GlobaleVariable (Id, IntegerVariable) … Weiterlesen

Arrays in T-SQL

Frage: Sind Arrays in T-SQL möglich? Lösung: Arrays werden von T-SQL nicht unterstützt. Als Alternative kann eine temporäre Tabelle erstellt. Eine andere Möglichkeit ist ein selbst definiertes Array in einer Variable vom Typ varchar(8000), auf die mit Offset-Berechnung zugegriffen wird. Beide Alternativen sind jedoch nur ein schwacher Ersatz. /* übernommen aus der Original sqlfaq.de */

Tabelle kopieren

Frage: Eine Tabelle mitsamt den Daten soll kopiert werden. Lösung: Die SQL-Anweisung Select alleFelder Into neueTabelle From alteTabelle erstellt eine neue Tabelle anhand der Ergebnisspalten der Abfrage und kopiert die Daten der Quelltabelle in die neue Tabelle. Indizies, Standardwerte, Einschränkungen, Fremdschlüssel usw. werden dabei nicht kopiert. Soll nur die Struktur der Tabelle kopiert werden, muss … Weiterlesen

Kalenderwoche ermitteln

Frage: Die Kalenderwoche eines Datums soll ermittelt werden. Lösung: Die SQL-Anweisung Select Datepart(Week, Getdate()) liefert die Kalenderwoche des aktuellen Datums. Leider ist die ermittelte Kalenderwoche nicht nach europäischer bzw. deutscher Norm. Es wird automatisch der 1. Januar in die 1. Kalenderwoche gesetzt. Der Fehler kann nur mit einer eigens programmierten Funktion korrigiert werden. Hierzu ein … Weiterlesen

Massenänderung an allen Tabellen

Problem: An allen Benutzertabellen soll eine neue Spalte ergänzt werden. Gibt es eine Möglichkeit, die neue Spalte mit einer einzigen Anweisung direkt an allen Tabellen zu ergänzen? Lösung: Die Systemdatenbank master enthält die undokumentierte Gespeicherte Prozedur sp_msforeachtable. Als Parameter erwartet diese Gespeicherte Prozedur eine SQL-Anweisung, die dann gegen alle Tabellen der Datenbank ausgeführt wird. Das … Weiterlesen

Anführungszeichen bei Stringverkettung

Frage: Innerhalb einer Stringverkettung muß ein Wert in einfachen Anführungszeichen angegeben werden. Das erste Anführungszeichen des Werts wird bei der Verkettung jedoch als Kennzeichnung für das Ende des Strings interpretiert. Lösung: Die einfachen Anführungszeichen (‚) innerhalb des Werts müssen doppelt angegeben werden. Beispiel: Set @localvariable = ‚Select feld1 From tabelle1 Where feld1 like “me%“‘ /* … Weiterlesen

Set @variable oder Select @variable

Frage: Einer Variablen kann ein Wert mit Set oder mit Select zugewiesen werden. Worin besteht der Unterschied? Lösung: Laut Online-Hilfe soll der Befehl Set genutzt werden. Als Begründung wird angegeben, dass bei Select das Ergebnis mehrere Datensätze umfassen könnte. In einem solchen Fall würde der Wert des letzten Datensatzes der Variable zugewiesen. Bei Set wird … Weiterlesen

Neuen Wert der Identity-Spalte ermitteln

Frage: Der neu erzeugte Wert einer Identity-Spalte soll ermittelt werden. Lösung: Dafür gibt es drei Vorgehensweisen, die kleine aber feine Unterschiede haben: SELECT @@Identity liefert den letzten Identity-Wert eines Gültigkeitsbereichs Beispiel: Ein Insert in eine Tabelle ergibt den Identity-Wert 7. Durch den Insert wird ein Trigger aktiviert, der in einer anderen Tabelle ebenfalls einen Datensatz … Weiterlesen

Cursor auf Systemprozedur

Frage: Das Ergebnis der Systemprozedur sp_who soll in einen Cursor geladen werden. Lösung: Die Deklaration eines Cursors mittels Execute ist   nicht möglich. Das Ergebnis der Systemprozedur sp_who kann aber weiterverarbeitet werden, wenn es vorher in eine temporäre Tabelle geschrieben wird. Beispiel: Create Table #temp (feld1 typ, feld2 typ, …) Insert #temp Exec sp_who Declare who_cursor … Weiterlesen

Vergleich mit Groß-/Kleinschreibung

Frage: Die Eingabe eines Passwords soll geprüft werden. Bei dem Vergleich ist die Groß-/Kleinschreibung zu berücksichtigen. Lösung: Der Vergleich zweier Strings mit Beachtung der Groß-/Kleinschreibung ist nur möglich, wenn bei der SQL Server Installation die Option Groß-/Kleinschreibung beachten aktiviert wurde. Ist dies nicht der Fall, muss für einen Case-sensitiven Vergleich der Inhalt der Spalte in … Weiterlesen