Vynulovani primary key   zodpovězená otázka

Databáze

Cau,

vytvoril jsem nekolik tabulek v MS SQL 2005 a nastavil primarnim klicum Identity increment. Testoval jsem aplikaci a vkladal nejaka data do tabulek. Po vyladeni jsem veskera data smazal a chci zacit vkladat ostra data. Je mozne nejak vynuloval automaticke vkladani cisel primarniho klice? Chci zase zacit od 1. Diky za odpoved.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nepomohlo by smazat a znovu vytvorit daný sloupec?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To me napadlo, ale to prave nechci, protoze mam provazani s ostatnima tabulkama (cizi klice).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mělo by to jít takto:

http://blogs.microsoft.co.il/blogs/maord...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

funguje, diky za rychlou odpoved

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ohledně Is Identity mě napadla jedna otázečka. Mám sloupec typu integer kam se při vložení záznamu automaticky vloží číslo. Dejme tomu že to bude hodně vytížená tabulka ve které se bude pořád mazat a přidávat větší množství dat. Co se stane když automaticky vložené číslo bude už tak velké, že bude mimo rozsah typu Integer? Je to něják automaticky ošetřeno jako že se třeba bude číslovat zase od 1 a budou doplněna čísla která v tabulce ještě nejsou? Nebo si to musím ohlídat sám?

Datový rozsah int je myslím více než dostatečný, takže nepředpokládám že by se to stalo. Spíš bych to chtěl vědět jen tak pro zajímavost:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, mít v tabulce 2 miliardy záznamů, jako šlo by to, ale na svém notebooku to raději zkoušet nebudu. Smířil bych se s tím, že než v tabulce budou miliardy záznamů, tak bude nová verze aplikace i databáze, takže pak můžete zareagovat.

Anebo použijte BIGINT, ten jen tak nedojde, 2^63 je podstatně víc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nemyslel jsem to tak že by bylo v tabulce tolik záznamů, ale že by to byla třeba nějáká pomocná tabulka do které by se často spoustu záznamů načítalo a mazalo. V tom případě by sloupec který je is identity pořád rostl i když by fyzicky v tabulce zdaleka tolik záznamů nebylo:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je pravda, tak by se to vyzkoušet dalo. A ještě kdyby se počáteční hodnota IDENTITY fieldu nastavila už rovnou skoro na okraj, tak se uvidí. Zkusím to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak a je to, databáze prostě nahlásí chybu:

Msg 8115, Level 16, State 1, Line 4
Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred.

Zkusit se to dá snadno, vytvoříte tabulku s dostatečně velkou počáteční hodnotou IDENTITY fieldu a přidáte do ní pár záznamů:

create table test (
  id int not null primary key identity(2147482648,1),
  data int
)

declare @i int;
set @i = 1;
while (@i < 2000) begin
  insert into test (data) values (5);
  set @i = @i + 1;
end

Řešením je použít BIGINT, tam už je těžko představitelné, že byste se dostal mimo rozsah.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za ozkoušení. Spíše mě zajímalo jak se zachová SQL server než že bych se této situace skutečně obával:) Ale je dobré o této situaci vědět než se spokojit pouze s vírou, že povolenou hodnotu prostě nepřekročím:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě je možné vynulovat příkazem TRUNCATE TABLE <název>

Zároveň se provede smazání dat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V diskusi pod tím článkem psali, že to nefunguje, pokud jsou v tabulce nějaké cizí klíče, což tady jsou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback