A7. T-SQL |
| A7.40. SELECT-Statement mit variablem Tabellennamen |
| Problem: In einem SELECT-Statement soll der Tabellenname durch eine lokale Variable ersetzt werden. |
| Lösung: In SQL-Statements können Variablen zwar in Ausdrücken, nicht aber anstelle von Objektnamen oder Schlüsselwörtern benutzt werden. Um den Tabellennamen in einem SQL-Statement erst zur Laufzeit zu ersetzen, muss mit dynamischen SQL gearbeitet werden. Dazu wird das SQL-Statement zur Laufzeit zu einem String zusammengesetzt und mit Execute oder sp_executesql ausgeführt. Zum Thema "Dynamisches SQL" hat Frank Kalis einen interessanten Artikel "Dynamisches SQL - Fluch und Segen" bereitgestellt. |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.39. RAISERROR |
| Problem: Obwohl ein RAISERROR mit Schweregrad 16 ausgeführt wird, wird die laufende Stored Procedure beim RAISERROR nicht beendet. |
| Lösung: Der Schweregrad 16 beendet eine Stored Procedrue nur dann, wenn auch wirklich ein Fehler aufgetreten ist. RAISERROR löst nicht einen Fehler aus, sondern belegt lediglich den @@ERROR-Wert mit der angegebenen Fehlernummer. Folgendes Mini-Skript soll das Verhalten des RAISERROR verdeutlichen: PRINT @@ERROR RAISERROR ('Es ist nix passiert!', 16, 1) IF @@ERROR = 0 PRINT 'Es ist wirklich nix passiert!' -- oder mit sp_addmessage PRINT @@ERROR EXEC sp_addmessage 50001, 16, N'Es ist nix passiert!', 'us_english' RAISERROR (50001, 16, 1) IF @@ERROR = 0 PRINT 'Es ist wirklich nix passiert!' ELSE PRINT 'So richtig ist immer noch nix passiert, aber es hat eine Fehlernummer!' EXEC sp_dropmessage 50001, 'us_english' GO |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.38. Daten skripten |
| Problem: Die Daten einiger Tabellen sollen als INSERT-Statements in eine Textdatei exportiert werden. |
| Lösung: itrain bietet ein Skript an, mit dem solche INSERT-Statements erzeugt werden können. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.37. Zeichen in String zählen |
| Problem: Gibt es eine Möglichkeit per SQL bestimmte Zeichen in einer Zeichenfolge zu zählen? |
| Lösung: Len('avcdafra') - Len(Replace('avcdafra','a','')) von Josef Pötzl |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.36. Registry auslesen |
| Problem: Per T-SQL sollen Werte aus der Registry gelesen werden. |
| Lösung: Es gibt eine undokumentierte Stored Procedure in der Datenbank master namens dbo.xp_regread mit den Parametern Rootkey, Path und Value. Beispiel: DECLARE @bla varchar(10) exec master.dbo.xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key='SOFTWARE\.....', @value_name='wert', @inhalt=@inhalt OUTPUT |
| Betrifft Version: 2000 |
| zurück |
| A7.35. Indexname und -spalten ermitteln |
| Problem: Der Indexname mit den entsprechenden Spalten aller Tabellen einer Datenbank soll ermittelt werden. |
| Lösung: Dazu bietet Frank Kalis zwei Lösungen an: http://www.insidesql.de/content/view/136/ http://www.insidesql.de/content/view/155/ |
| Betrifft Version: 2000 |
| zurück |
| A7.34. Spalten eines Index ermitteln |
| Problem: Die Spalten eines Index sollen ermittelt werden. |
| Lösung: Da hilft die Stored Procedure exec sp_helpindex 'deineTabelle' oder die Variante von Frank Kalis. |
| Betrifft Version: 2000 |
| zurück |
| A7.33. Integer-Wert mit führenden Nullen |
| Problem: Ein Integer-Wert soll mit führenden Nullen ausgegeben werden. |
| Lösung: Eine Kombination der Befehle STR und REPLACE liefert den Integer-Wert mit führenden Nullen als String zurück. Folgendes Beispiel liefert "000001": DECLARE @a INT SET @a = 1 SELECT REPLACE(STR(@a,6),' ',0) |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.32. Vergleich von Datumswerten ohne Uhrzeit |
| Problem: Das Datum aus zwei Spalten vom Typ datetime soll ohne Uhrzeit verglichen werden. |
| Lösung: Der Inhalt der datetime-Spalte muss vorher in eine Spalte vom Typ varchar(10) konvertiert werden: convert(varchar(10), meindatum, 112) = convert(varchar(10), meinanderesdatum, 112) |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.31. Aktuelles Alter ermittlen |
| Problem: Anhand des Geburtsdatum soll das aktuelle Alter ermittelt werden. |
| Lösung: Beispiele gibt es unter www.insidesql.de/content/view/304/ und www.insidesql.de/content/view/206/ |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.30. Prüfung, ob Feld in Tabelle existiert |
| Problem: Per T-SQL soll geprüft werden, ob ein Feld in einer Tabelle existiert. |
| Lösung: Ähnlich wie in A7.6 beschrieben, kann dies über die Schematas gelöst werden. If Exists (Select * From Information_Schema.Columns Where Table_Name = 'tabellenname' And Column_Name = 'spaltenname') Select 'Feld vorhanden' Else Select 'Feld nicht vorhanden' Vielen Dank für diesen Beitrag an Thomas Fischer. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.29. case-sensitiver Vergleich von Zeichenfolgen |
| Problem: Per T-SQL sollen Zeichenfolgen case-sensitiv verglichen werden. |
| Lösung: Der Vergleich wird über die Erweiterung der WHERE-Condition mit der COLLATE-Anweisung möglich. WHERE SpalteA = SpalteB COLLATE Latin1_General_CS_AS |
| Betrifft Version: 2000 |
| zurück |
| A7.28. Dezimaltrennzeichen als Komma im String |
| Problem: Gleitkommazahlen in varchar-Spalten sollen in den Datentyp money konvertiert werden. Wegen dem Dezimaltrennzeichen werden die Zahlen nicht korrekt konvertiert. So wird z.B. aus der Zahl 123,45 die Zahl 12345,00. Wie wird eine korrekte Konvertierung erreicht? |
| 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 für diesen Beitrag an Frank Kalis. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.27. Zahl mit führenden Nullen ausgeben |
| Problem: 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. Folgende Konvertierung liefert das Ergebnis: right('00' + convert(varchar(2),zahl),2) wird der Zahl eine führende Null vorangestellt. Beispiel: declare @Datum datetime set @datum = '20040101' select right('00' + convert(varchar(2),day(@Datum)),2) oder mit einer Zahl: declare @Zahl int set @Zahl = 1 select right('00' + convert(varchar(2),@Zahl), 2) Vielen Dank für diesen Beitrag an Christa Kurschat. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.26. Auflistung der Datenbanken |
| Problem: Die Datenbanken einer SQL Server-Installation sollen aufgelistet werden. |
| Lösung: Dazu gibt es zwei Möglichkeiten: Entweder mit dem SQL-Statement Select name From master..sysdatabases oder über eine Auswertung der Schematas mit Select catalog_name From Information_Schema.Schemata. Microsoft empfiehlt die Schematas zu nutzen, da sich die Systemtabellen des SQL Servers in Zukunft ändern könnten. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.25. Ergebnis einer Stored Procedure speichern |
| Problem: Das Ergebnis einer Stored Procedure soll in einer Tabelle gespeichert werden. |
| Lösung: Per Insert Into tabellenname EXEC procname wird das Ergebnis in einer Tabelle gespeichert. Voraussetzung dafür ist, dass die die Tabelle entsprechend den Ergebnisspalten der Stored Procedure angelegt wurde. Vielen Dank für diesen Beitrag an Sebastino Martina. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.24. Globale Variable in T-SQL |
| Problem: In SQL Server sollen globale Variablen definiert und in verschiedenen Stored Procedures 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) Values(4711, 4712) Go --Handhabung innerhalb der Stored Procedure Declare @gVariable int Select @gVariable = Variable From GlobaleVariable Where Id = 4711 Vielen Dank für diesen Beitrag an Elmar Boye. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.23. Arrays in T-SQL |
| Problem: 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 aber nur ein schwacher Ersatz. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.22. Tabelle kopieren |
| Problem: Eine Tabelle mitsamt den Daten soll kopiert werden. |
| Lösung: Das SQL-Statement Select Felder Into neueTabelle From alteTabelle erstellt eine neue Tabelle anhand der Ergebnisspalten der Abfrage und kopiert die Daten der Quelltabelle in die neue Tabelle. Indizies, Defaults, ForeignKeys usw. werden dabei nicht kopiert. Um das Kopieren der Daten zu vermeiden, muss das Statement nur um eine WHERE-Condition wie Where 0 = 1 erweitert werden. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.21. Kalenderwoche ermitteln |
| Problem: Die Kalenderwoche eines Datums soll ermittelt werden. |
| Lösung: Das SQL-Statement 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 Stored Procedure korrigiert werden. Unter Downloads gibt es hierfür das Script Kalenderwoche ermitteln. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.20. Massenänderung an allen Tabellen |
| Problem: An allen Benutzertabellen soll eine neue Spalte ergänzt werden. Gibt es eine Möglichkeit, die neue Spalte direkt an allen Tabellen zu ergänzen? |
| Lösung: In der Systemdatenbank master gibt es die undokumentierte Stored Procedure sp_msforeachtable 'befehl'. Dieser Stored Procedure kann als Parameter ein SQL-Statement übergeben werden, das bei der Ausführung gegen alle Tabellen der Datenbank ausgeführt wird. Dieses Beispiel ergänzt jede Benutzertabelle mit dem Feld LastChange vom Typ datetime: master..sp_msforeachtable 'Alter Table ? Add LastChange datetime' |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.19. Anführungszeichen bei Stringverkettung |
| Problem: Innerhalb einer Stringverkettung muß ein Wert in einfachen Anführungszeichen angegeben werden. Das erste Anführungszeichen des Wertes wird aber 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%''' |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.18. Set @variable oder Select @variable |
| Problem: Einer Variablen kann ein Wert mit Set oder mit Select zugewiesen werden. Worin besteht der Unterschied? |
| Lösung: Laut der 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 diesem Fall wird der Wert des letzten Datensatzes der Variable zugewiesen. Bei Set wird immer nur ein Wert der Variable zugewiesen. Eine Zuweisung wie Set @variable = (Select feld From Tabelle) produziert einen Fehler, sobald das Ergebnis mehr als einen Datensatz umfasst. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.17. Neuen Wert der Identity-Spalte ermitteln |
| Problem: 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: Der Insert in eine Tabelle ergibt den Identity-Wert 7. Durch den Insert wird ein Trigger aktiviert, der in einer anderen Tabelle ebenfalls einen Datensatz anlegt. Dort ergibt der Insert den Identity-Wert 20. Die Rückgabe per SELECT @@Identity ist 20. SELECT Current_Id FROM tabelle liefert den letzten Identity-Wert der angegebenen Tabelle. Beispiel: Benutzer A speichert einen neuen Datensatz und erzeugt dabei den Identity-Wert 8. Benutzer B speichert in der Zwischenzeit auch einen neuen Datensatz und erzeugt dabei den Identity-Wert 9. Beide Benutzer A erhalten den Wert 9. SELECT Scope_Identity liefert den letzten Identity-Wert des aktuellen Gültigkeitsbereichs. Beispiel: Benutzer A speichert per Stored Procedure neuen Datensatz. Der neue Identity-Wert ist 8. Benutzer B speichert auch einen neuen Datensatz, der den Identity-Wert 9 ergibt. Benutzer A erhält den Wert 8, Benutzer B den Wert 9. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.16. Cursor auf Systemprocedure |
| Problem: Das Ergebnis der Systemprocedure sp_who soll in einen Cursor geladen werden. |
| Lösung: Die Deklaration eines Cursors per Exec ist nicht möglich. Das Ergebnis der Systemprocedure 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 Cursor For Select * From #temp usw. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.15. Vergleich mit Groß-/Kleinschreibung |
| Problem: Die Eingabe eines Passwords soll geprüft werden. Bei dem Vergleich soll die Groß-/Kleinschreibung beachtet werden. |
| Lösung: Der Vergleich zweier Strings mit Beachtung der Groß-/Kleinschreibung ist nur möglich, sofern 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 den Datentyp Binary konvertiert werden. Beispiel: Select * From benutzertabelle Where feldbenutzer = @User And Convert(Varbinary, feldpassword) = Convert(Varbinary, @Password) |
| Betrifft Version: 7.0 |
| zurück |
| A7.14. Debugger für T-SQL |
| Problem: Gibt es für T-SQL einen Debugger? |
| Lösung: SQL Server 7.0 bietet nur die unkokumentierte 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. Dieser wird mit F8 aktiviert. Über das Kontextmenü der einzelnen Stored Procedure kann der Debugger gestartet werden. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.13. Anzahl Zeilen einer Abfrage ermitteln |
| Problem: Innerhalb einer Stored Procedure soll die Verarbeitung nur dann fortgeführt werden, wenn das Ergebnis des SQL-Statements mehr als 0 Zeilen beinhaltet. 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 beim nächsten Statement wieder gelöscht und neu festgelegt. Daher sollte der Wert direkt in einer lokalen Variablen vom Typ Integer gespeichert werden. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.12. Zeichenfolge N' |
| Problem: 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. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.11. Kommentare in T-SQL |
| Problem: Eine Stored Procedure soll dokumentiert werden. Wie können einzelne Zeilen oder Blöcke von Zeilen als Kommentar gekennzeichnet werden? |
| Lösung: Komplette Blöcke werden mit /* am Anfang und mit */ am Ende des Blocks, einzelne Zeilen oder Fragmente am Ende einer Kommandozeile mit -- markiert. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.10. Probleme mit @@Error |
| Problem: Eine Stored Procedure beinhaltet eine Fehlerbehandlung über @@Error. Bei Verwendung von Transaction funktioniert die Fehlerbehandlung 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. |
| Betrifft Version: 7.0 |
| zurück |
| A7.9. Vergleich mit Ausdrücken |
| Problem: 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 dasselbe Ergebnis liefern. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.8. Vergleich mit LIKE '%wert%' |
| Problem: Ein SQL-Statement 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. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.7. Berechnung eines Zeitraums |
| Problem: 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 |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.6. Ausgabe des Ergebnis limitieren |
| Problem: Die Ausgabe eines SELECT-Statements soll auf eine bestimmte Anzahl Zeilen limitiert werden. |
| Lösung: Die Ausgabe kann mit Set Rowcount auf eine bestimmte Anzahl Zeilen limitiert werden. So liefert Set Rowcount 5 lediglich 5 Zeilen der Ausgabe. Nach der Verarbeitung muss die Begrenzung unbedingt mit Set Rowcount 0 wieder aufgehoben werden. Eine Alternative ist die Klausel Top im SELECT-Statement. Select Top 5 feldname From tabelle liefert 5 Ergebniszeilen. Diese Variante wird vom Abfrageoptimierer erkannt und ist daher auch die performantere Alternative. |
| Betrifft Version: 2005-2000-7.0 |
| zurück |
| A7.5. Prüfung ob Objekt existiert |
| Problem: Mit T-SQL soll überprüft werden, ob ein bestimmtes Objekt existiert. |
| Lösung: Hier gibt es mehrere Möglichkeiten: 1) Die Auswertung der Schematas 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 Stored Procedure Objekt_Id: If Object_Id('tabellenname') = 0 ... oder besser If Objectproperty (Object_id('tabellenname', 'IsTable') = 1 ... |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.4. Fehlerbehandlung |
| Problem: In einer Stored Procedure soll eine Fehlerbehandlung implementiert werden. |
| Lösung: Eine Fehlerbehandlung kann mit der globalen Variable @@Error implementiert werden. Bei jedem SQL-Statement wird in dieser Variable die Fehlernummer des Statements gespeichert. Tritt kein Fehler auf, wird der Wert 0 gespeichert. Das ist auch der Grund, warum innerhalb der Fehlerbehandlung der Wert von @@Error immer zuerst in einer lokale Variable vom Typ integer gespeichert werden sollte. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.3. Löschen eines Index |
| Problem: An einer Tabelle soll ein Index gelöscht werden. Mittels sp_helpindex tabelle wurde der Indexname ermittelt. Das Statement 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 Stored Procedure sp_helpindex indexname ermittelt werden. In der Spalte index_description sind die Indezies am Eintrag unique und die Constraints an unique key zu erkennen. Ein Constraint kann nur mit Alter Table tabellenname Drop Constraint constraintname gelöscht werden. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.2. Auflisten der Benutzertabellen einer Datenbank |
| Problem: Eine Auflistung der Benutzertabellen soll 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 mit Select name From sysobjects Where type = 'u' oder über die Schematas mit Select table_name From Information_Schema.Tables ermittelt werden. Microsoft empfiehlt die Schematas zu nutzen, da sich die System-Tabellen des SQL Servers in Zukunft ändern könnten. |
| Betrifft Version: 2000-7.0 |
| zurück |
| A7.1. Datum ohne Zeit aus datetime-Feld |
| Problem: Ein SELECT-Statement, dass in der WHERE-Condition den Vergleich einer datetime-Spalte mit einem Datum enthält, liefert keine bzw. falsche Ergebnisse. |
| Lösung: Die datetime-Spalte speichert das Datum immer mit der 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 der datetime-Spalte vor dem Vergleich in einen String konvertiert werden, der auch nur das Datum beinhaltet. Die Online-Hilfe bietet unter den Stichworten convert und cast eine Übersicht der Syntax für die Konvertierung in die unterschiedlichen Datumsformate. Ein Datum im Format "dd.mm.yyyy" wird mit der Syntax Convert(datetime,convert(char(10),datumspalte,104)) konvertiert. Die Zahl 104 kennzeichnet dabei das Format des Datums mit vierstelliger Jahrhundertzahl. |
| Betrifft Version: 2000-7.0 |
| zurück |