none
SET IDENTITY_INSERT verursacht eine Schleife im Aufgaben Agent.

    Frage

  • Hallo liebe mit Techis,

    meine Frage ist folgende.

    Ich habe in eine STORED PROCEDURE für eine Aufgabe erstellt zum Testen. Also bitte nicht auf Sinnhaftigkeit der Prozedur beurteilen sondern bitte meinen bereits gefundenen Fehler analysieren. Also hier die Richtige Prozedur:

    CREATE OR ALTER PROCEDURE Kopiere
    @anzahl int
    AS 
    BEGIN
    
    	SET IDENTITY_INSERT Artikel_Verlauf ON;
    	
    	INSERT INTO Artikel_Verlauf([Artikel-Nr], Artikelname, Einzelpreis)
    		SELECT 
    		* 
    		FROM 
    			Artikel_Kopie AS ak 
    		ORDER BY 
    			ak.Einzelpreis DESC
    			OFFSET 0 ROWS FETCH NEXT @anzahl ROWS ONLY
    
    	SET IDENTITY_INSERT Artikel_Verlauf OFF;
     
    END 

    und hier was ich zuerst hatte:

    CREATE OR ALTER PROCEDURE Kopiere
    @anzahl int
    AS 
    BEGIN
    
    	SET IDENTITY_INSERT Artikel_Verlauf ON;
    	
    	INSERT INTO Artikel_Verlauf([Artikel-Nr], Artikelname, Einzelpreis)
    		SELECT 
    		* 
    		FROM 
    			Artikel_Kopie AS ak 
    		ORDER BY 
    			ak.Einzelpreis DESC
    			OFFSET 0 ROWS FETCH NEXT @anzahl ROWS ONLY
    
    	SET IDENTITY_INSERT Artikel_Verlauf ON;
     
    END 

    wie evtl. nicht auf den ersten Blick erkennbar habe ich beide SET IDENTITY_INSERT auf ON gestellt.

    Dabei wurde beim ausführen der Aufgabe immer 64 Datensätze in die Tabelle eingefügt. Die Aufgabe hatte zum Testen einen 1 Minuten Interval. Ich weiß das die Prozedur eine maximale Verschachtelung durchgeführt hat aufgrund des 2. ON. Aber ich weiß nicht warum das passiert. Mir ist auch klar das wenn das 2. ON auf OFF stelle funktioniert alles wie es soll.  

    Zusammengefasst würde ich gerne wissen warum der Fehler eine Verschachtelung verursacht, wenn doch ein ON nur in einer Session aktiv ist und danach wieder auf den Default Wert gestezt wird. IIch hoffe die Frage ist verständlich gestellt.

    Gruß



    • Bearbeitet Desdakon Donnerstag, 21. Februar 2019 09:42 faschenwert eingefügt
    Donnerstag, 21. Februar 2019 09:14

Alle Antworten

  • Hallo,

    ich verstehe nicht, was Du hier mit Verschachtelung meinst und einen Unterschied zwischen den beiden SP sehe ich auch nicht?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 21. Februar 2019 09:36
  • Hab in dem ersten Codeblock das 2. IDENTITY_INSERT auf OFF gestellt. Beim Copy Paste 2 mal das gleiche eingefügt. Sorry. Beim Ausführen der Aufgabe sollen mir die ersten Reihen einer der Tabelle in eine weitere Tabelle eingefügt werden und das jede Minute. Also 2 Datensätze pro Minute. Ich habe bei meinem ersten Versuch beide SET IDENTITY_INSERT auf ON gestellt. Dabei hat er mir pro Minute 64 Datensätzte kopiert. Die maximale verschachtelungstiefe ist bei SQL ja 32. Folglich 32x2 Datensätze. Aber ich will wissen warum das dort geschiet.

    Danke

    Gruß

    Donnerstag, 21. Februar 2019 09:49
  • Ich verstehe immer noch nicht, was Du hier mit Verschachtelung meinst; das läge nur vor, wenn eine SP eine andere SP (ggf. sich selbst) aufruft, das ist hier nicht der Fall.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 21. Februar 2019 10:32
  • Genau das ist es ja was mich verwundert hat. Bei jedem Ausführen der Aufgabe über den Aufgaben Agent hat die SP 64 Datensätze eingefügt anstatt 2(hab in @Anzahl den wert 2 eingesetzt). Vllt hat es ja garnichts mit einer Verschachtellung zu tun. Das ist nur mein erster Gedanke gewesen weil 32x2. Vllt bin ich ja da schon auf dem Holzweg. Ich kann mir nur nicht anders erklären warum. Und falls dies der Grund ist warum es am SET IDENTITY_INSERT ON liegt.
    Donnerstag, 21. Februar 2019 10:54