Problémy s identity sloupci - merge replikace
Zdravím, mám jeden problém. Jedná se o komunikaci sql server 2000 oproti sql server 3.0 ce na PDA.
Mám tabulku se sloupcem identity který je nastavený na not for replication.
K zakládání nových řádku dochází pouze na PDA, takže sice tam mám duplicitní identity řádky, ale vždy jeden stejný od každého PDA, to by nevadilo, je to dále filtrované HOST_NAME().
Problém je ale pokud budu muset natáhnout do PDA komplet celou databázi znova, natáhnu sice všechny data ale tím se mi nastaví sloupce identity znovu na hodnotu 1, tím budu mít v PDA duplicitní identity řádky což by fakt nešlo.
Cosi jsem našel že se dá nová hodnota od které má sloupec identity začít nastavit pomocí : DBCC CHECKIDENT (<TABLE NAME>, 'reseed').
Jak ale nastavit při znovuvytvoření databaze u subscribera sloupce identity tak aby nezačínali jedničkou ? Poradí někdo díky.
Nebylo by vhodne zmenit ten sloupec na "neidentity" a vytvare si jednoznacny klic, treba podle DateStampu: pokud se vkladaji data na PDA, nemelo by dochazet k nejakym problemum napr. pri rychlem vkladani dat za sebou.
No máš pravdu sloupec identity tam nepotřebuju. Ale jelikož potřebuju spojit dvě tabulky podle jednoho klíče potřebuju teda nějaký společný sloupec, první mě napadlo uniqueidentifier ale v tabulce zase kvůli replikaci už jeden takový sloupec je a druhý být nemůže, pak mě napadlo teda now.Ticks, te bych použil v obou tabulkách a měl bych je tímto jedinečným klíčem spojené. Co když se ale u PDA přenastaví čas a dojde k duplicitě sloupce. No nevím, co myslíš.
Přimo ve visual basicu to nejde generovat, tak si založím další tabulku která bude mít pouze jeden sloupec uniqueidentifier, takže když přidám řádek do tabulky vygeneruje se mi sloupec typu uniqueidentifier a ten použiju pro spojení těch dvou tabulek. To by mohlo jít ne ?
Ne to je taky blbost, opět tu tabulku musím replikovat, kvůli tomu kdybych musel natáhnout celou databazi znova. Tak teda fakt nevím.
(Máme tu i tlačítko odpovědět a když se zaregistruješ, můžeš příspěvek i upravovat )
A nemá náhodou SQL server funkci, která ti UIN vrati, bez toho, aby musela byt automaticky ukladana do sloupce tabulky? Pak bys ji jen zapsal...
No tak jak jsem říkal že přímo visual basic sám osobě nedokáže generovat uniqueidentifier tak to jsem se spletl, jde to. Stačí zapsat Private gZavoz As Guid = System.Guid.NewGuid. Pak stačí maximálně jeden dotaz na tabulku do které chci zapsat jestli tam už takový uniqueidentifier neexistuje a pokud ne pak ho uložím a tím by měl být snad problém vyřešen.
Díky za pomoc.
Dotaz do tabulky, zda tam existuje je zbytecny. Proto se to jmenuje GUID (Global unique identifier)
Takže když ve visual basicu vytvořím nový uniqueidentitier pomoci Guid.NewGuid, není možné že v tabulce bude existovat sloupec rowguidcol se stejnou hodnotou ?
ne
Prosím tě ještě jeden dotaz ohledně toho uniqueidentifieru. Jestli jsem to správně pochopil tak typ Guid zajištuje unikátní hodnoty sloupce v rámci databáze. Mám teda Pull merge replikaci z PDA do Sql server 2000. Pak mám Push merge replikaci z replikačního agenta (sql server 2000) na server (sql server 2000). Dejme tomu že do tabulky kterou replikuju budu zapisovat jak na PDA tak na Serveru nové řádky dat. Ani v tomto případě nemůže vzniknout duplicitní Guid který nemá parametr Rowguidcol na yes, když bude třeba na Serveru založený řádek s Guidem stejným jaký je na PDA ,ale kvůli tomu že uživatel ještě neodreplikovat data z PDA na Server, sql server to nebude vědět. Díky za odpověď.
GUID je unikatni celosvetove. Sklada se z vic informaci - MAC sitove karty, cas, informace o PC. Takze pravdepodobnost, ze se potkaji 2 GUID je hodne nulova.
GUID se pouziva na tridy v registru (koukni na klic Classes), na identifikaci hardware a urcite by to delalo problemy, kdyby se potkavaly ID jednotlivych vyrobcu...