Ktoś wysłał mi bazę danych (za pomocą pliku .mdf
i .ldf
), którą załączyłem na serwerze (bez błędów, ostrzeżeń itp.) i chociaż nie mam dowodu (ponieważ mam nie mają dostępu do serwera, z którego pochodzi DB), wygląda na to, że wartości klucza podstawowego (tożsamości) są inne niż pierwotnie. Wydaje się również, że są one „zresetowane” — wszystkie wartości klucza podstawowego zaczynają się od 1, podczas gdy na podstawie odwołań do klucza obcego jest jasne, że jest to niepoprawne (na przykład tabela z tylko 1 wierszem ma wartość klucza podstawowego wynoszącą 1, ale tabela, która się do niej odwołuje, odwołuje się do wartości 7).
Chociaż tak naprawdę nie obchodzi mnie to, jestem ciekaw, dlaczego tak się dzieje (jeśli jest wyjaśnienie)?
To, czego naprawdę potrzebuję, to dowiedzieć się, czy istnieje sposób na dołączenie bazy danych i zachowanie prawidłowych wartości?
Edytuj: O ile wiem, odniesienia do kluczy obcych są skonfigurowane prawidłowo.
Oto kilka zrzutów ekranu:
2 odpowiedzi
Wszystko, o czym mogę myśleć, ponieważ istnieją FK, to to, że mieli zły projekt na początek, a potem ktoś zdał sobie sprawę, że potrzebuje FK, ale były już złe dane, których nie chcieli usunąć i w ten sposób utworzył FKs WITH NOCHECK
Czy wszystkie osierocone rekordy mają wczesne numery identyfikacyjne?
LanguageID
), która ma tylko 1 wiersz; LanguageID
tego wiersza to 1
. We wszystkich wszystkich tabelach, które się do niego odwołują, LanguageID
wierszy to 7
.
Dołączanie bazy danych nigdy nie zmienia zawartości tabeli. Wszystkie widoczne wartości pochodzą z aplikacji, która utworzyła bazę danych. ``select” nie jest uszkodzony.
select ... from ::fn_dblog(null, null)
do przeanalizowania historii dziennika, w jaki sposób te wartości tożsamości zostały wstawione, przynajmniej dziennika, który jest obecny w twojej bazie danych. To szybko pokazałoby, czy stało się to przed, czy po dołączeniu. Zobacz sqskills.com/blogs/paul/post/… na przykład użycia fn_dblog
select * from ::fn_dblog(null, null)
, wydaje się, że nie ma żadnych wierszy, które byłyby pomocne (choć będę szukać dalej). Nie widzę żadnych wierszy, które oczywiście zmieniają dane, co wciąż pozostawia mnie do zastanowienia: jeśli dane nie zmieniły się podczas dołączania bazy danych, w jaki sposób @#%(& czy te FK mogą istnieć, jeśli dane referencyjne wartości są nieprawidłowe?!
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.