2 Stimmen

Code-Länge vs. Organisation

Ich habe mehrere verschachtelte Einfügebefehle. Einige der verschachtelten Schleifen enthalten redundanten Code. Sollte ich den redundanten Code zu einer eigenen Schleife machen oder separate Instanzen desselben Codes in jeder Schleife erstellen?

BEISPIEL (zur Verdeutlichung bearbeitet):

--Questions 32<->37

SET @index=0

SET @values = 'at your primary grocery store^at WalMart or Sam''s Club^at any other chain (e.g. Target, K-Mart)^in general'

IF SUBSTRING(@values, LEN(@values), 1) <> '^' SET @values = @values + '^'
WHILE (LEN(@values)<>0)
BEGIN

SET @index=CHARINDEX('^', @values)
SET @result=SUBSTRING(@values, 0, @index)
SET @values=SUBSTRING(@values, LEN(@result)+2, LEN(@values)-LEN(@result)-1)

    SET @question = 'How much do you spend <b>'+@result+'</b> per trip compared to this time last year?'
    SET @qnum=@qnum+1

    INSERT INTO checklist_questions (
        checklist_id
        ,checklist_question_id
        ,checklist_answer_category_id
        ,autofail_flag
        ,checklist_responsible_type_id
        ,correction_days
        ,checklist_question_header_id
        ,question
    )
    VALUES (
        @checklist_id
        ,@qnum --question #
        ,40    --answer category id
        ,0     --autofail flag
        ,'P'   --checklist_responsible_type_id
        ,27    --correction_days
        ,4     --correction_days
        ,@question
    )

    SET @i=1
    WHILE (@i<=6)
    BEGIN
        INSERT INTO checklist_answers (
        checklist_id
        ,checklist_question_id
        ,checklist_answer_category_id
        ,checklist_answer_type_id
        ,detail_flag
        )
            VALUES (
            @checklist_id
            ,@qnum --question number
            ,38    --category
            ,@i    --answer type 
            ,0     --detail flag
        )
    SET @i=@i+1
    END
END

Das gleiche Muster wiederholt sich immer wieder, mit unterschiedlichen Werten für @values und @question.

0voto

HLGEM Punkte 91543

Ich würde meine Eingaben in eine temporäre Tabelle oder Tabellenvariable aufteilen und diese dann in einer Einfügeanweisung verwenden, die auf einer select not a values-Klausel basiert.

-1voto

David Peters Punkte 1807

Ohne alle Details zu kennen, würde ich empfehlen, einen Sproc oder eine Funktion zu verwenden, um den redundanten Code zu kapseln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X