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

Debugger für T-SQL

Frage: Gibt es für T-SQL einen Debugger? Lösung: SQL Server 7.0 bietet nur die undokumentierte System-Procedure sp_sdidebug an. Ab SQL Server 2000 wird der Transact-SQL-Debugger mitgeliefert, der im Query Analyzer über den Objektkatalog verfügbar ist. Der Objektkatalog wird mit F8 aktiviert. Der Debugger selbst kann über das Kontextmenü der jeweiligen Gespeicherten Prozedur gestartet werden. /* … Weiterlesen

Anzahl Zeilen einer Abfrage ermitteln

Frage: Innerhalb einer Gespeicherten Prozedur soll die Verarbeitung nur dann fortgeführt werden, wenn das Ergebnis einer SQL-Anweisung mindestens 1 Zeile enthält. Wie kann die Anzahl der Ergebniszeilen ermittelt werden? Lösung: Die Anzahl der ermittelten Ergebniszeilen stehen in der globalen Variable @@Rowcount. Der Wert von @@Rowcount wird jedoch bei der nächsten Anweisung wieder gelöscht und neu … Weiterlesen

Zeichenfolge N‘

Frage: In generierten Befehlen des SQL Servers und auch in der Hilfe wird oft die Zeichenfolge N‘ vor einem String verwendet. Was hat diese Zeichenfolge zu bedeuten? Lösung: N‘ kennzeichnet den nachfolgenden String als Unicode. /* übernommen aus der Original sqlfaq.de */

Kommentare in T-SQL

Frage: Wie können in T-SQL einzelne Zeilen oder Blöcke von Zeilen als Kommentar gekennzeichnet werden? Lösung: Einzelne Zeilen werden mit zwei Bindestrichen (—) und komplette Blöcke mit /* am Anfang und mit */ am Ende des Blocks markiert. /* übernommen aus der Original sqlfaq.de */

Probleme mit @@Error

Frage: Eine Gespeicherte Prozedur beinhaltet eine Fehlerbehandlung über @@Error. Bei Verwendung von Transaktionen funktioniert die Fehlerbehandlung jedoch nicht mehr. Lösung: Nach Begin Transaction sollte direkt Set Nocount On folgen. Dadurch kann der Wert in @@Error wieder ausgelesen werden. Die Nocount-Einstellung muss vor dem Commit wieder mit Set Nocount Off ausgeschaltet werden. /* übernommen aus der … Weiterlesen

Vergleich mit Ausdrücken

Frage: Ein Vergleich mit Where preis + 1 > 2 führt zu einem TableScan, obwohl die Spalte indiziert ist. Lösung: Ein berechneter Ausdruck sollte innerhalb eines Vergleichs so formuliert werden, dass er nur auf einer Seite der Bedingung steht. Nur so kann der Index genutzt werden. In dem angeführten Beispiel würde Where preis > 1 … Weiterlesen

Vergleich mit LIKE ‚%wert%‘

Frage: Eine SQL-Anweisung mit Like ‚%wert%‘ führt zu einem TableScan, obwohl die Spalte indiziert ist. Lösung: Durch die Verwendung des Platzhalterzeichens % am Beginn des Suchausdrucks wird die Nutzung des Index verhindert und dadurch der TableScan ausgelöst. /* übernommen aus der Original sqlfaq.de */

Berechnung eines Zeitraums

Frage: Der Zeitraum zwischen zwei Datumswerten soll ermittelt werden. Lösung: Select Case When DateAdd(Year, Datediff(Year, datum1, datum2), datum1) > datum2 Then Datediff(Year, datum1, datum2) – 1 Else DateDiff(Year, datum1, datum2) End as Differenz /* übernommen aus der Original sqlfaq.de */

Ausgabe des Ergebnis limitieren

Frage: Die Ausgabe einer SELECT-Anweisung soll auf eine bestimmte Anzahl Zeilen begrenzt werden. Lösung: Die Ausgabe einer SELECT-Anweisung lässt sich mit Set Rowcount limitieren. So liefert Set Rowcount 5 lediglich 5 Zeilen der SELECT-Anweisung. Nach der Verarbeitung sollte die Begrenzung unbedingt mit Set Rowcount 0 wieder aufgehoben werden. Eine Alternative ist die Klausel Top in … Weiterlesen