Pokud používáte SqlDataSource, dotaz by měl vypadat takto: INSERT INTO ... VALUES (...); SELECT @newId = SCOPE_IDENTITY() Datovému zdroji přidejte InsertParameter @newId a nastavte mu Direction na InputOutput. Hodnotu pak zjistíte v události ItemInserted mrknutím do kolekce parametrů. V SQL Serveru jsou 3 funkce, kterými ID posledně vloženého záznamu můžete zjistit: - IDENT_CURRENT('tabulka') je nejméně často používaná metoda, protože vrací skutečné poslední ID v tabulce, takže při současném přístupu více uživatelů vám vrátí kraviny. - @@IDENTITY vrací posledně vložené ID v rámci SQL spojení, tzn. ostatní uživatelé vás neovlivní. Máte-li ale na tabulce, do které vkládáte, trigger, a pokud v něm vkládáte jiný záznam, dostanete ID záznamu z toho triggeru. - SCOPE_IDENTITY dělá přesně to, co je potřeba - vrátí ID naposledy vloženého záznamu v kódu, který spouštíte (tzn. nebude vracet ID z triggeru, i když se spustil), a opět funguje v rámci spojení, tzn. ostatní uživatelé ho nemají šanci ovlivnit. Metoda zjištění následujícího čísla je oproti tomu horší, protože buď to to číslo jenom vrátí (a tím pádem musíte dávat pozor na přístup více uživatelů, což je potíž), anebo to vrátí nové ID a provede inkrementaci. Pokud ale aplikace často zjišťuje nová IDčka (a že jsem takových už viděl), stašně se jimi plýtvá (viděl jsem aplikaci, která z 10000 vygenerovaných IDček použila asi jedno) a za den to počítadlo vzrostlo o několik milionů. A velikost INTu jsou jen 4 miliardy, že...
|