sql >> Databáze >  >> RDS >> Sqlserver

SQL Server - Nejlepší způsob, jak získat identitu vloženého řádku?

  • @@IDENTITY vrátí poslední hodnotu identity vygenerovanou pro jakoukoli tabulku v aktuální relaci, napříč všemi rozsahy. Tady musíte být opatrní , protože je to napříč obory. Můžete získat hodnotu ze spouštěče namísto aktuálního příkazu.

  • SCOPE_IDENTITY() vrátí poslední hodnotu identity vygenerovanou pro jakoukoli tabulku v aktuální relaci a aktuálním rozsahu. Obecně to, co chcete používat .

  • IDENT_CURRENT('tableName') vrátí poslední hodnotu identity vygenerovanou pro konkrétní tabulku v jakékoli relaci a libovolném rozsahu. To vám umožní určit, ze které tabulky chcete hodnotu, v případě, že výše uvedené dvě nejsou přesně to, co potřebujete (velmi vzácné ). Také, jak zmínil @Guy Starbuck:"Můžete to použít, pokud chcete získat aktuální hodnotu IDENTITY pro tabulku, do které jste nevložili záznam."

  • OUTPUT klauzule INSERT příkaz vám umožní přístup ke každému řádku, který byl vložen prostřednictvím tohoto příkazu. Vzhledem k tomu, že se vztahuje na konkrétní prohlášení, je přímější než ostatní výše uvedené funkce. Je však trochu podrobnější (budete muset vložit do tabulky proměnnou/dočasnou tabulku a poté se na ni dotazovat) a poskytuje výsledky i v případě chyby, kdy je příkaz vrácen. To znamená, že pokud váš dotaz používá plán paralelního provádění, je to jediná zaručená metoda pro získání identity (krátce k vypnutí paralelismu). Provádí se však před spouští a nelze je použít k vrácení hodnot generovaných spouštěčem.



  1. Instalace ovladačů JDBC pro Microsoft SQL Server v nástrojích Pentaho Data Integration a BA Server

  2. 12 Běžně používané SQL operátory

  3. Proč je UDF mnohem pomalejší než poddotaz?

  4. SQL Buddy – Webový nástroj pro správu MySQL