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

Prüfung, ob Objekt existiert

Frage: Mit T-SQL soll überprüft werden, ob ein bestimmtes Objekt existiert. Lösung: Hier gibt es mehrere Möglichkeiten: 1) Die Auswertung der Schemata mittels If Exists(Select * From Information_Schema.Tables Where Table_Name = ‚tabellenname‘) 2) Die Auswertung der Systemtabelle sysobjects mittels If Exists(Select name From sysobjects Where name = ‚tabellenname‘ and type = ‚u‘) 3) Mit der … Weiterlesen

Fehlerbehandlung

Frage: In einer Gespeicherten Prozedur soll eine Fehlerbehandlung implementiert werden. Lösung: Eine Fehlerbehandlung lässt sich mit der globalen Variable @@Error realisieren. Bei jeder SQL-Anweisung wird in dieser Variable die Fehlernummer der Anweisung gespeichert. Tritt kein Fehler auf, ist dies der Wert 0. Aus diesem Grund sollte innerhalb der Fehlerbehandlung der Wert von @@Error immer zuerst … Weiterlesen

Löschen eines Index

Frage: An einer Tabelle soll ein Index gelöscht werden. Mittels sp_helpindex tabelle wurde der Indexname ermittelt. Die Anweisung Drop Index indexname führt jedoch zu einem Fehler. Lösung: Mit Drop Index indexname werden nur Indizes, aber keine Einschränkungen (Constraints) gelöscht. Ob es sich bei dem zu löschenden Index um eine Einschränkung handelt, kann mit der Gespeicherten … Weiterlesen

Auflisten der Benutzertabellen einer Datenbank

Frage: Es soll eine Auflistung der Benutzertabellen erstellt werden. Die Systemtabellen der Datenbank sollen in dieser Liste nicht vorkommen. Lösung: Die Benutzertabellen können mit einer Abfrage auf der Systemtabelle sysobjects mittels Select name From sysobjects Where xtype = ‚u‘ oder über die Schemata mit Select table_name From Information_Schema.Tables ermittelt werden. Microsoft empfiehlt die Schemata zu … Weiterlesen

Datum ohne Zeit aus datetime-Feld

Frage: Eine SELECT-Anweisung mit einem Vergleich einer datetime-Spalte zu einem Datum in der WHERE-Bedingung liefert keine bzw. falsche Ergebnisse. Lösung: Die datetime-Spalte speichert das Datum immer inklusive Uhrzeit und somit wird auch die Uhrzeit mit in den Vergleich einbezogen. Dies kann zu falschen Ergebnissen führen. Wenn nur das Datum verglichen werden soll, muss der Wert … Weiterlesen

Pivottabellen in SQL Server

Frage: In Access können mittels einer Pivottabelle Zeileninformationen als Spalteninformationen dargestellt werden. Wie kann dies mit SQL Server umgesetzt werden? Lösung: Die Darstellung von Zeileninformationen in Spalten wird mit CASE erreicht. Mehr dazu gibt es in den Online-Hilfe unter CASE sowie unter dem Stichwort Kreuztabellenberichte. /* übernommen aus der Original sqlfaq.de */