Unbekannten PRIMARY KEY bestimmen



  • aber wenn die ich einen "SQL-Treiber" für die datenbank habe, dann müsste es doch laufen, oder?!



  • Wie greifst du denn auf die Datenbanken zu? Bei ODBC gibt's z.B. eine Funktion mit der du den Primary Key abfragen kannst.



  • Ich habe ein ähnliches Problem:
    Allerdings kenne ich die Datenbank, MySQL.
    mit:
    show columns from Tabellenname
    bekomme ich eine tabelle wo auch eingetragen ist was der Primarykey ist. Aber ich kann kein where anhängen, also

    show columns from tabellenname where Key = 'PRI';
    ABER:
    show columns from tabellenname where Field = 'ID';
    funktioniert.

    Kann mir jemand sagen warum das so ist?
    PS LIKE geht auch nicht. Ist das aus sicherheitsgründen so, oder warum?
    Ich hätte gerne nur eine Entität als ergebnis damit ich den Spaltenname gleich habe, ohne Stringverarbeitung, da ich mich in PHP net ganz so auskenne.

    mfg



  • Ich bin jetzt etwas weiter gekommen, anscheinend ist key das Problem da es für MySQL ein Schlüsselwort ist. Hat jemand eine Idee? Kennt einer eine Escape-sequenz dafür? oder geht es auch mit 'as' irgendwie?

    mfg



  • OK ich habe jetzt eine Lösung:

    use information_schema;
    select column_name from columns where column_key = 'PRI' and table_name = 'tabellenname';



  • Normalerweise kann der Client-Treiber die nötigen Informationen bereitstellen. Unter ADO gibt es dafür z.B. die OpenSchema Funktion. Allerdings ist auch dies stark treiberabhängig genau wie das Beispiel oben nicht auf allen DBs funktionieren wird. Das ganze ist so ein typisches Problem relationaler Datenbanken bzw des SQL Dialekts. Das ganze ist nicht wirklich genormt und jeder Datenbank-Entwickler backt seinen eigenen Kram.



  • mit der odbc funktion - SQLPrimaryKey() - kannst du von jeder datenbank, die odbc unterstützt, die namen der spalten abfragen, die den primary key bilden. Man muss also keinen direkten zugriff auf das data dictionary haben, denn jeder hersteller hat ja heute noch sein eigenes DD. in der sql2003 norm ist allerdings nun zum ersten mal das DD auch genormt worden, wird aber noch einige jahre dauern, bis alle db anbieter dieses genormte DD haben werden. solange kannst du ja SQLPrimaryKey() benutzen.
    viele grüsse, tesuji



  • ich brauche ein SQL-Statement, das für eine Tabelle jene Attributr liefert, welche zum Primärschlüssel gehören.
    Ich arbeite auf einer MS SQL Server DB
    Hoffe, Ihr könnt mir helfen.

    Danke schonmal vorab!

    greetz, m4sl



  • @dam4sl: Das kannst du dir leicht aus den Systemtabellen konstruieren. Schau dir mal diese übersicht über sql server systemtabllen an:
    http://www.microsoft.com/sql/prodinfo/previousversions/systables.mspx
    mit dem bild in systbl.zip kommst du dann weiter.



  • vielen dank, das hilft mir wirklich weiter in dem gewirr von tabellen durchzusehen 🙂
    schönen Tag noch!

    cu


Anmelden zum Antworten