case-sensitiver Vergleich von Zeichenfolgen

Frage: Per T-SQL sollen Zeichenfolgen Case-Sensitiv verglichen werden. Lösung: Der Vergleich wird über die Erweiterung der WHERE-Bedingung mit der COLLATE-Anweisung möglich. Ein Beispiel: WHERE SpalteA = SpalteB COLLATE Latin1_General_CS_AS /* übernommen aus der Original sqlfaq.de */

Dezimaltrennzeichen als Komma im String

Frage: Gleitkommazahlen in varchar-Spalten sollen in den Datentyp money konvertiert werden. Wegen dem Dezimaltrennzeichen werden die Zahlen jedoch nicht korrekt konvertiert. So wird z.B. aus der Zahl 123,45 die Zahl 12345,00. Wie kann eine korrekte Konvertierung erreicht werden? Lösung: Da gibt es zwei Möglichkeiten: SELECT CAST(REPLACE(zahl,‘,‘,‘.‘) AS DECIMAL(8,2)) oder SELECT CAST(REPLACE(REPLACE(zahl,‘.‘,“),‘,‘,‘.‘) AS DECIMAL(8,2)) Vielen Dank … Weiterlesen

Zahl mit führenden Nullen ausgeben

Frage: Eine einstellige Zahl soll mit führenden Nullen angezeigt werden. Lösung: Für eine solche Ausgabe muss die Zahl in einen String konvertiert und dieser mit den führenden Nullen ergänzt werden. Beispiel mit einem Datum: declare @Datum datetime set @datum = ‚20040101‘ select right(’00‘ + convert(varchar(2),day(@Datum)),2) Beispiel mit einer Zahl: declare @Zahl int set @Zahl = … Weiterlesen

Auflistung der Datenbanken

Frage: Die Datenbanken einer SQL Server-Installation sollen aufgelistet werden. Lösung: Eine solche Auflistung kann mit der SQL-Anweisung Select name From master..sysdatabases oder über eine Auswertung der Schemata mit Select catalog_name From Information_Schema.Schemata erfolgen. Microsoft empfiehlt die Schemata zu nutzen, da sich die Systemtabellen in Zukunft ändern könnten. /* übernommen aus der Original sqlfaq.de */

Ergebnis einer Gespeicherten Prozedur speichern

Frage: Das Ergebnis einer Gespeicherten Prozedur soll in einer Tabelle gespeichert werden. Lösung: Das Speichern des Ergebnisses einer Gespeicherten Prozedur ist mit folgender Syntax möglich: Insert Into tabellenname EXEC procname Voraussetzung hierfür ist, dass die angegebene Tabelle bereits existiert und die Spalten dieser Tabelle den Ergebnisspalten der Gespeicherten Prozedur entsprechen. Vielen Dank für diesen Beitrag … Weiterlesen

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