5

Szukasz obejście:Unikać schematu niedopasowanie systemu numerów wersji tabel

Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'. 

Gdy próbuje użyć SQL 2016 System-wersjonowanym (Temporal) Stoły w SSDT dla Visual Studio 2015.

I” Wcześniej zdefiniowane podstawowy tabeli:

CREATE TABLE [dbo].[Example] (
    [ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [ExampleColumn] VARCHAR(50) NOT NULL, 
    [SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 
    [SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL, 
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime) 
) 
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example])) 
GO 

(zakładając [history] schemat jest poprawnie utworzony w SSDT). To dobrze się układa za pierwszym razem.

Gdybym później dokonać zmiany:

CREATE TABLE [dbo].[Example] (
    [ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [ExampleColumn] CHAR(50) NOT NULL, -- NOTE: Changed datatype 
    [SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 
    [SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL, 
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime) 
) 
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example])) 
GO 

Wtedy budowa zakończy się komunikatem o błędzie powyżej. Każda zmiana typu danych, długości, precyzji lub skali spowoduje ten błąd. (W tym zmiana z VARCHAR na CHAR i VARCHAR(50) na VARCHAR(51), zmiana NOT NULL na NULL nie powoduje błędu.) Robienie Clean nie naprawia rzeczy.

Moje bieżące obejście polega na upewnieniu się, że najnowsza wersja została sprawdzona w celu kontroli źródła, następnie otwórz Eksplorator obiektów SQL Server, rozwiń folder Projects - XXXX i przejdź do tabeli dotkniętej problemem, a następnie usuń ją. Następnie muszę przywrócić kod (który usuwa SSDT) ​​z kontroli źródła. Ta procedura jest nużąca, niebezpieczna, a nie to, co chcę robić.

Czy ktoś znalazł sposób, aby to naprawić? Czy to błąd?

Korzystam z Microsoft Visual Studio Professional 2015, wersja 14.0.25431.01 Update 3 z narzędziami Data Server 14.0.61021.0 programu SQL Server.

+0

Twoja tabela nie wygląda na prawidłową tabelę z wersją systemu - brakuje jej kolumny "OKRES ZA SYSTEM CZASU" i "PERIOD" - https://msdn.microsoft.com/en-us/library/mt590957. aspx –

+0

Masz rację! Zapomniałem uwzględnić te, kiedy budowałem przykłady. Naprawiłem wpis. –

+0

Nie mogę replikować tego w SQL RTM 2016, wykonując instrukcję 'ALTER TABLE'. W jaki sposób zmieniasz swoje schematy? –

Odpowiedz

4

Mogę odtworzyć ten problem. My (zespół narzędzi serwera SQL) będziemy pracować, aby to naprawić w przyszłej wersji SSDT. W międzyczasie uważam, że można obejść to poprzez jawne zdefiniowanie tabeli historii (tj. Dodać do tabeli tabelę historii z żądanym schematem), a następnie ręcznie zsynchronizować schemat tabeli bieżących i historii.

Jeśli napotkasz problemy z jawnym zdefiniowaniem tabeli historii, spróbuj zamknąć program Visual Studio, usuwając plik DBMDL w katalogu głównym projektu, a następnie ponownie otwierając projekt.

+0

Sposób obejścia jest dobry ...dużo dodatkowego pisania, ale działa. Dzięki! –

+2

Jeszcze nie zostało naprawione od 20170512 –

5

Po prostu doświadczyliśmy tego problemu. Znaleźliśmy sposób na obejście tego problemu poprzez skomentowanie elementów wersji systemu w tabeli (co sprawiło, że stał się on normalną tabelą), zbudowanie projektu z potrzebną zmianą schematu (która się powiedzie), a następnie przywrócenie linii wersjonowania systemu (co również powiedzie się).

Powiązane problemy