none
Convert (Access) queries using "format"-statement RRS feed

  • Frage

  • My Access-queries often use the format-statement (e.g. format("ww",[OrderDate]).

    Using SSMA, I get error messages about the format-parts of the query.

    In the above example, I changed format to datepart and it seems to work in ACCESS.

    But checking the pure SQL-text shows that 'datepart' stays in lowe-case letters while 'year' transforms to YEAR automatically in the same context.

    Using SSMA shows me an error message for that statement.

    The original text is:

    year([Field] + "-" + datepart("ww",[Field]) as KW

    The error message is "the identifier Format(UNKNOWN,VARCHAR) was not converted"

    Can someone help me ?

    Mittwoch, 28. März 2012 12:29

Antworten

  • Hallo Uwe

    Uwe Ricken wrote:

    Das funktioniert aber leider nicht. Das hängt schlicht und einfach damit
    zusammen, daß FORMAT z. B. ein VB-Konstrukt aus Access ist. Woher soll

    Na ja, ich würde sagen, dass das in einer Query eher vom Expression Service behandelt wird und kein VBA Callback auslöst.

    der SQL-Server VB(A) beherrschen. Allgemeingültigkeit kannst Du nur da

    Zumindest kommt die Jet Engine aus dem gleichen Haus wie der SQL Server, da könnte man schon noch sowas erwarten, oder?

    herstellen, wo beide Systeme gleiche Voraussetzungen schaffen (z. B. SQL
    gem. ANSI 99)

    Davon ist aber Access weiter entfernt als die Sonne vom Ende der Galaxie
    :)

    Es gibt andere Möglichkeiten:

    Gruss
    Henry

    • Als Antwort markiert NicoNi Freitag, 30. März 2012 06:24
    • Bearbeitet Henry Habermacher Freitag, 30. März 2012 08:01 spelling and formatting
    Freitag, 30. März 2012 03:15

Alle Antworten

  • Hallo Nico, in T-SQL kommen keine Hochkommata um das ww.

    Select datepart(WW,getdate())

     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Mittwoch, 28. März 2012 13:24
  • Vielen Dank zunächst mal.

    Der o.g. Code funktioniert innerhalb eine Access-Query. ww ohne Anführungszeichen geht hingegen innerhalb Access NICHT. In diesem Fall wird ww als Parameter interpretiert und abgefragt.

    - Die Verwendung von Format() in ACCess führt zu einem Fehler bei der Konvertierung

    - datepart ginge wohl, wird aber von Access und SSMA unterschiedlich gewünscht.

    Leider sind meine Queries voll von solchen und ähnlichen Format()-Anweisungen, insofern schlagen fast ein Dutzend Konvertierungen fehl.

    Wie geht man typischerweise damit um ?

    Donnerstag, 29. März 2012 10:20
  • Indem man alles manuell anpaßt, wenn man es auf den SQL Server bringt.

    Du wirst doch wohl nicht versuchen, eine allgemeingültige Query für Acc und SQL Server bauen wollen, oder?

    Donnerstag, 29. März 2012 11:02
  • Naja, schlecht wäre das nicht.

    "Manuell anpassen" ist ein schreckliches Wort !!!

    Donnerstag, 29. März 2012 14:11
  • Hi,

    es gibt wohl ein paar Tools die das automatisch können. Einfach mal bei der Suchmaschine deiner Wahl "Access SQL to T-SQL" eingeben. Ansonsten wird nur der manuelle Weg bleiben.

    Grüße

    Oliver

    Donnerstag, 29. März 2012 14:14
  • Das funktioniert aber leider nicht. Das hängt schlicht und einfach damit zusammen, daß FORMAT z. B. ein VB-Konstrukt aus Access ist. Woher soll der SQL-Server VB(A) beherrschen. Allgemeingültigkeit kannst Du nur da herstellen, wo beide Systeme gleiche Voraussetzungen schaffen (z. B. SQL gem. ANSI 99)

    Davon ist aber Access weiter entfernt als die Sonne vom Ende der Galaxie :)


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de

    Donnerstag, 29. März 2012 16:18
  • Hallo Uwe

    Uwe Ricken wrote:

    Das funktioniert aber leider nicht. Das hängt schlicht und einfach damit
    zusammen, daß FORMAT z. B. ein VB-Konstrukt aus Access ist. Woher soll

    Na ja, ich würde sagen, dass das in einer Query eher vom Expression Service behandelt wird und kein VBA Callback auslöst.

    der SQL-Server VB(A) beherrschen. Allgemeingültigkeit kannst Du nur da

    Zumindest kommt die Jet Engine aus dem gleichen Haus wie der SQL Server, da könnte man schon noch sowas erwarten, oder?

    herstellen, wo beide Systeme gleiche Voraussetzungen schaffen (z. B. SQL
    gem. ANSI 99)

    Davon ist aber Access weiter entfernt als die Sonne vom Ende der Galaxie
    :)

    Es gibt andere Möglichkeiten:

    Gruss
    Henry

    • Als Antwort markiert NicoNi Freitag, 30. März 2012 06:24
    • Bearbeitet Henry Habermacher Freitag, 30. März 2012 08:01 spelling and formatting
    Freitag, 30. März 2012 03:15