Welcome to Sign in | Join | Help
in Search

Error Message

Last post 02-08-2008, 11:09 by ggciubuc. 12 replies.
Sort Posts: Previous Next
  •  02-04-2008, 4:15 3935

    Error Message

    Salut,

    Exista vreo cale prin care sa emulez cumva functia ERROR_MESSAGE() din SQL 2005 pe un SQL 2000 ?
    Daca aveti vreo idee .... va rog ... spuneti-mi.

    Codul in SQL 2005 e ceva de genu ..

    inserez ceva intr-un tabel
    dupa care

        IF @@ERROR <> 0
        BEGIN
            SET @errorMessage = ERROR_MESSAGE()
            RETURN
        END

    merci.

    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
    Filed under:
  •  02-04-2008, 4:41 3936 in reply to 3935

    Re: Error Message

    Nu prea ai cum să faci chestia asta în SQL 2000. Cel mai apropiat lucru ar fi:

    SET @errorMessage=(SELECT description FROM master..sysmessages WHERE error=@@ERROR)

    Dar asta nu îţi returnează parametrii erorii, ci doar template-ul mesajului, de exemplu:
    %ls statement conflicted with %ls %ls constraint '%.*ls'. The conflict occurred in database '%.*ls', table '%.*ls'%ls%.*ls%ls.
    în loc de:
    DELETE statement conflicted with COLUMN REFERENCE constraint 'FKName'. The conflict occurred in database 'DatabaseName', table 'TableName', column 'ColumnName'.

    Totuşi, de ce ai nevoie de chestia asta? În mod normal, textul erorii ajunge la client şi poţi să faci acolo ce vrei cu el (să-l afişezi, să-l scrii într-un audit log, etc).

    Răzvan
  •  02-04-2008, 4:42 3937 in reply to 3935

    Re: Error Message

    Depinde de eroare.

    O eroare poate cauza terminarea instructiunii care a cauzat-o, a tranzactiei curente, a batch-ului curent, a conexiunii si in cazuri extreme inchiderea serverului.

    Cititi mai multe aici: http://www.sommarskog.se/error-handling-I.html#textretrieve

     


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  02-04-2008, 4:58 3938 in reply to 3936

    Re: Error Message

    Pai cam care este ideea in mare.

    Vreau sa import niste date dintr-un anumit fisier, adica sa fac bulk insert. Datele primite le bag inntr-un tabel unprocessed din BD dupa care le impart in functie de strunctura BD in mai multe tabele.
    Totul se face prin pproceduri stocate.
    Ideea este ca vreau ca sa pot returna mesaje la user prin care sa se afiseaze ce constrangeri sunt incalcate pentru a putea sa modific datele din fisierul de import.

    De asta tot importul aceasta este format dintr-o procedura stocata care apeleaza inca cam 5-6 proceduri din interiorul ei.
    Faza este ca erori pot sa primesc in fiecare dintre aceste subproceduri iar in cea principala aduc mesajul la felcum am scris in primul post.

    in procedura principala fiecare dintre subproceduri sunt incadrate in IF-uri iar daca s-a aruncat o eroare  sa nu m intre in urmatoarele. Am ceva de genu

            IF LEN(@eroare) = 0
            BEGIN
                PRINT 'Start Import to unprocessed ' + CAST(GetDate() AS VARCHAR)   
                set @start = GetDate()
                EXEC @SPTransfer @eroare OUTPUT
                set @endExec = GetDate()   
                Print '   Execution Time ' + Cast(Datediff(second,@start,@endExec) as varchar) +' seconds'
                PRINT 'END Step_2_To_Unprocessed ' + CAST(GetDate() AS VARCHAR)
            END


    iar la finalul procedurii principale am un raiseerror
           
            IF LEN(@eroare) <> 0
                RAISERROR(@eroare, 16, 1)



    Toate aceste proceduri ar tre sa ruleze fara nicio problema si cu cam acelasi rezultat pe SQL 2000 acum merg pe 2005
    Daca aveti vreo idee .... plss...

    Daniel.


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-05-2008, 10:30 3941 in reply to 3938

    Re: Error Message

    Vad ca e vorba de un import de date asa ca ma gandesc la DTS; ati incercat varianta dezvoltarii unui package DTS? Spun asta pt ca lucrurile se misca mult mai natural cand e vorba de utilizarea unui tool ETL cum e DTS-ul la SQL 2000 sau SSIS la 2005.
    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  02-05-2008, 1:41 3946 in reply to 3941

    Re: Error Message

    Salut,

    Putem sa incercam. Ideea este ca opentru SQL 2005 este deja scris tot codul din spate (proc stocate) si exista clienti care folosesc SQl 2000.
    Pentru acestia trebuie ca acele proceduri sa mearga, ca sa nu m rescriem.
    Oricum ideea care evhiculata de tine ar fi dezvoltatea unui DTS pentru SQL 2000 si un SSIS pentru SQL 2005, si in functie de client dam ceea ce trebuie.

    Merci, o sa ma documentez pentru ca nu prea am experienta in DTS -uri.


    Daniel

    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-05-2008, 2:06 3947 in reply to 3946

    Re: Error Message

    Eu asa as face. In plus codul scris pt sp se poate refolosi pt ca acesta se poate rula in cadrul taskurilor din package!


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  02-05-2008, 2:24 3948 in reply to 3947

    Re: Error Message

    Voi incerca :) numa ca nu sunt familiar cu tool-urile oferite de SQL Server.

    Daca cumva ai ceva documentatie pentru SSIS te rog ...

    Eu acu incerc sa imi fac rost de ceva carti de la MS pentru SQL 2005 si ns daca le comand de pe Amazon cat platesc transportul.

     

    Daniel.


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-05-2008, 4:43 3952 in reply to 3948

    Re: Error Message

    Poti incepe cu BOL si cu

    http://www.databasejournal.com/article.php/1503191

    "Votez" pentru o solutie SSIS/DTS. Un beneficiu interesant pentru tine ar fi si posibilitatile de tratare a erorilor.

  •  02-05-2008, 8:47 3961 in reply to 3948

    Re: Error Message

    Eu as incepe cu http://www.sqldts.com/ si http://www.sqlis.com/
    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  02-08-2008, 10:47 3966 in reply to 3961

    Re: Error Message

    Să nu uităm de varianta de aici pentru documentaţii.

    Cât despre proceduri:

    Ai putea ca în procedura mare (cea care apelează procedurile celelalte) să creezi mai întâi o tabela temporară iar apoi, la execuţia fiecărei proceduri, să adaugi în această tabelă, erorile întâlnite. După execuţia procedurilor de verificare dar înainte de terminarea execuţiei procedurii mari să verifici conţinutul acestei tabele. Dacă tabela conţine ceva, întorci un mesaj spre utilizator... iar dacă nu... treci mai departe cu importul.

    Totuşi, această sarcină este recomandată a se executa cu DTS respectiv SSIS.


    Cătălin D.
  •  02-08-2008, 10:59 3967 in reply to 3966

    Re: Error Message

    Sper ca am inteles mesajul bine. Spui ca indiferent in ce subprocedura imi da ceva eroare (poate chiar in prima) sa execut pana la final procedura mare?
    Ideea este sa ies cand intalnesc prima eroare. Oricum chestia cu prima se face cel m simplu asa cum am facut-o deja adica cu o variabila de output in fiecare subprocedura care sa imi
    intoarca eroare.
    Ideea de la care am plecat este inlocuirea la nivelul subprocedurilor a bucatilor SET mesaj = ERROR_MESSAGE() cu ceva care sa mearga pe SQL 2000.
    Folosind DTS sau SSIS ar trebui in mod normal sa am doua pachete care in functie de versiunea de SQL de la client sa ii dau pachetul care ii merge.


    Daniel.

    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-08-2008, 11:09 3969 in reply to 3967

    Re: Error Message

    Fluxul de activitati care initial era rezolvat de proceduri/subproceduri aici in package este inlocuit cu flux de obiecte(taskuri) DTS sau SSIS asa ca tratarea erorilor este facilitata de instrumentele specifice mediului.


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems