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

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