none
Probleme mit identity_insert SQL Server 2014 RRS feed

  • Frage

  • Aus verschiedenen Gründen kann ich bei dem Kunden kein Backup einspielen, sondern ich muss die Updates per Skript einspielen. Dafür erzeuge ich die Skripts auf unserem Server per Tasks/Skripts generieren ...

    Beim Einspielen dieser Skripts habe ich momentan das Phänomen, dass einige der Tabellen sich nicht befüllen lassen, weil offenbar das zugehörige "Set <tablename> identity_insert On" (auch vom MMS erzeugt) nicht ausgeführt wird. Das führt dazu, dass die Tabelle nicht befüllt wird.

    Natürlich kann man das händisch gerade ziehen, aber bei umfangreichen Insert-Skripts ist das nicht übersichtlich und auch nicht trivial. Die Ausführung über osql hat auch keine Änderung ergeben.

    Hat jemand eine Idee?

    Michael


    Montag, 1. Juli 2019 16:16

Antworten

  • Hallo Michael,

    wie hast Du die Skripte erstellt?

    Du könntest folgenden Weg wählen:

    Visual Studio 2019, Community Developper Edition

    <Extras> <SQL Server> <Neuer Schemavergleich>

    Quelldatenbank auswählen, Zieldatenbank Auswählen

    Über Optionen festlegen, was verglichen werden soll

    Skript erstellen

    Ist sehr komfortabel.

    Schönen Abend.


    Dienstag, 2. Juli 2019 20:27
  • Hallo Jörg,

    das Problem ist zwar nicht gelöst worden, allerdings lag die Ursache in einem Skriptfehler, dass diesen Fehler ausgelöst hat.

    Dein Vorschlag mit einem Schemavergleich zu arbeiten ist zwar vielleicht in "normalen" Umgebungen recht schick und komfortabel, aber in unserem Umfeld leider nicht möglich. Das würde schon scheitern an "Quelldatenbank auswählen, Zieldatenbank Auswählen". Wir haben keinerlei direkten Zugriff auf den Kunden Server und müssen vieles daher per Skript lösen.

    Ansonsten würde ich natürlich Backups einspielen. Momentan verspreche ich mir Besserung dadurch, dass ich die Tools kombiniere (SQL Server Skripterstellung und Power Designer bei Dingen, die SQL Server einfach nicht so gut kann)

    Danke für die Hilfe

    Michael

    Mittwoch, 3. Juli 2019 17:51

Alle Antworten

  • Hallo Michael,

    kommt irgendeine (Fehler)meldung? Falls ja, welche genau?

    Da es nur einige Tabellen betrifft: Wo liegt der Unterschied zwischen diesen und den restlichen Tabellen? Gibt es dort evtl. Trigger, Constraints, Foreign Keys, Datentypen, ... die es in den anderen Tabellen nicht gibt?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 1. Juli 2019 22:06
    Moderator
  • Hallo Stefan,

    es kommt natürlich die folgende Fehlermeldung:

    Ein expliziter Wert für die Identitätsspalte kann nicht in der <blabla>-Tabelle eingefügt werden, wenn IDENTITY_INSERT auf OFF festgelegt ist.

    Wie oben erwähnt kann ich das natürlich händisch nachziehen, indem ich den Anweisungsblock wiederhole. Aber bei einem Skript mit mehr als 150.000 Zeilen wird das ganze schon einigermaßen mühsam. Zudem verstehe ich überhaupt nicht, warum das gleiche Skript bei uns in der Firma (auf einem SQL Server 2017) völlig fehlerfrei durchläuft.

    Gruß

    Michael

    Dienstag, 2. Juli 2019 05:06
  • Hallo Michael,

    poste bitte mal die exakte Buildnummer deines SQL 2014 (SELECT @@VERSION).

    Sind es immer die gleichen Tabellen? Oder mal die eine, mal die andere, ...?

    Wenn es immer die gleichen sind, ändert es etwas, wenn Du testweise den Codeblock für diese Tabelle weiter oben in den SQL Statements unterbringst? (Also den gesamten Block inkl. SET IDENTITY_INSERT ON ... INSERT INTO ... SET IDENTITY_INSERT OFF)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 2. Juli 2019 09:25
    Moderator
  • Hallo Stefan,

    vielen Dank für Deine Hilfe. Wir haben die Ursache der Fehler (und natürlich auch der Folgefehler) gefunden. Eine der Tabellen hat eine Strukturänderung erfahren, die nicht im Skript berücksichtigt war. Dadurch kam es zu Folgefehlern beim identity_insert.

    Leider sind inzwischen die Skripte viel zu groß (über 150.000 Zeilen), so dass sie nicht mehr manuell handhabbar sind.

    Gruß

    Michael

    Dienstag, 2. Juli 2019 12:44
  • Hallo Michael,

    wie hast Du die Skripte erstellt?

    Du könntest folgenden Weg wählen:

    Visual Studio 2019, Community Developper Edition

    <Extras> <SQL Server> <Neuer Schemavergleich>

    Quelldatenbank auswählen, Zieldatenbank Auswählen

    Über Optionen festlegen, was verglichen werden soll

    Skript erstellen

    Ist sehr komfortabel.

    Schönen Abend.


    Dienstag, 2. Juli 2019 20:27
  • Hallo Jörg,

    das Problem ist zwar nicht gelöst worden, allerdings lag die Ursache in einem Skriptfehler, dass diesen Fehler ausgelöst hat.

    Dein Vorschlag mit einem Schemavergleich zu arbeiten ist zwar vielleicht in "normalen" Umgebungen recht schick und komfortabel, aber in unserem Umfeld leider nicht möglich. Das würde schon scheitern an "Quelldatenbank auswählen, Zieldatenbank Auswählen". Wir haben keinerlei direkten Zugriff auf den Kunden Server und müssen vieles daher per Skript lösen.

    Ansonsten würde ich natürlich Backups einspielen. Momentan verspreche ich mir Besserung dadurch, dass ich die Tools kombiniere (SQL Server Skripterstellung und Power Designer bei Dingen, die SQL Server einfach nicht so gut kann)

    Danke für die Hilfe

    Michael

    Mittwoch, 3. Juli 2019 17:51