Discussion:
Maximalen Wert des Primärschlüssels zurückgeben
(zu alt für eine Antwort)
Mirko Schattke
2004-03-02 09:56:06 UTC
Permalink
Hi!

Ich habe viele Tabellen mit unterschiedlichen Primärschlüssel-Namen.
Ich suche nach einem SQL-Befehl, der für alle einsetzbar ist, und mir den Maximalwert des Primärschlüssels zurückgibt, ohne jedoch dessen Namen zu kennen.
Sowas ungefähr:

SELECT MAX(MyPrimaryKey) FROM Addresses;

Hat jemand eine Lösung?
Danke!

mfG
Mirko
Jörg Ackermann
2004-03-02 10:32:27 UTC
Permalink
Hi,
Post by Mirko Schattke
Ich habe viele Tabellen mit unterschiedlichen Primärschlüssel-Namen.
Ich suche nach einem SQL-Befehl, der für alle einsetzbar ist, und mir den Maximalwert des Primärschlüssels zurückgibt, ohne jedoch
dessen Namen zu kennen.
Post by Mirko Schattke
SELECT MAX(MyPrimaryKey) FROM Addresses;
SELECT Max(IDENTITYCOL) from Addresses

Gruß
Mirko Schattke
2004-03-02 12:21:06 UTC
Permalink
Schonmal nicht schlecht, leider funktioniert das nur mit Identitäts-Spalten (Autowert). Ich darf aber die Primärschlüssel leider nicht ändern. Gibt es für normale Primärschlüssel vielleicht etwas Ähnliches
Olaf Pietsch
2004-03-02 12:44:07 UTC
Permalink
Hallo Mirko,
Post by Mirko Schattke
Schonmal nicht schlecht, leider funktioniert das nur mit
Identitäts-Spalten (Autowert). Ich darf aber die Primärschlüssel
leider nicht ändern. Gibt es für normale Primärschlüssel vielleicht
etwas Ähnliches?
Die Spaltennamen kannst Du finden mit, Beispiel:

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tc,
[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] as kcu
where
tc.[TABLE_NAME] = kcu.[TABLE_NAME]
and
tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
and
tc.CONSTRAINT_TYPE = 'PRIMARY KEY'

Gruß Olaf
Mirko Schattke
2004-03-02 13:01:08 UTC
Permalink
Super, jetzt habe ich schonmal den Namen des Primärschlüssels

select kcu.[COLUMN_NAME] from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tc
[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] as kc
wher
tc.[TABLE_NAME] = kcu.[TABLE_NAME
an
tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAM
an
tc.CONSTRAINT_TYPE = 'PRIMARY KEY
an
kcu.[TABLE_NAME] = 'Addresses

Nun möchte ich genau davon das Maximum. Ich müsste den Text also in den SELECT MAX(...) ... Befehl einbauen. Leider kann ich das nicht über eine Programmiersprache machen, sondern muss in SQL bleiben - ist es möglich, einem SQL-Befehl Text einzusetzen
Olaf Pietsch
2004-03-02 14:04:31 UTC
Permalink
Hallo Mirko,
Post by Mirko Schattke
Nun möchte ich genau davon das Maximum. Ich müsste den Text also in
den SELECT MAX(...) ... Befehl einbauen. Leider kann ich das nicht
über eine Programmiersprache machen, sondern muss in SQL bleiben -
ist es möglich, einem SQL-Befehl Text einzusetzen?
Da würde ich zeilenweise durchgehen, also z. B. mit einem CURSOR und das
select max(...) from ... in einem dynamischen SQL auszuführen:
http://www.algonet.se/~sommar/dynamic_sql.html

Gruß Olaf
Mirko Schattke
2004-03-02 14:46:07 UTC
Permalink
Danke euch allen, jetzt habe ich meine Lösung

DECLARE @MyPrimaryKey NVARCHAR(50

SELECT @MyPrimaryKey = kcu.[COLUMN_NAME] FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] AS kc
WHER
tc.[TABLE_NAME] = kcu.[TABLE_NAME
an
tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAM
an
tc.CONSTRAINT_TYPE = 'PRIMARY KEY
an
kcu.[TABLE_NAME] = 'tdAddresses

EXEC('SELECT MAX(' + @MyPrimaryKey + ') FROM tdAddresses')

Da kommt immer der Maximalwert des Primärschlüssels raus, es muss nur noch die Möglichkeit abgefangen werden, dass keine Datensätze vorhanden sein könnten.
Christoph Muthmann
2004-03-03 07:21:14 UTC
Permalink
[snip]
Da kommt immer der Maximalwert des Primärschlüssels raus, es muss nur
noch die Möglichkeit abgefangen werden, dass keine Datensätze
vorhanden sein könnten.
Hallo Mirko,
wie wäre es mit coalesce?

EXEC('SELECT coalesce(MAX(' + @MyPrimaryKey + '), 1) FROM tdAddresses');


Einen schönen Tag noch,
Christoph
--
(Please post ALL replies to the newsgroup only unless indicated otherwise)
Jörg Ackermann
2004-03-03 08:02:18 UTC
Permalink
Hi,
...
Post by Mirko Schattke
Da kommt immer der Maximalwert des Primärschlüssels raus, es muss
nur noch die Möglichkeit abgefangen werden, dass keine Datensätze vorhanden sein könnten.
...
EXEC('SELECT Isnull(MAX(' + @MyPrimaryKey + '),0) FROM tblBlz');

Gruß

Loading...