2015-12-22 10 views
7

enter image description heredane Włóż w tabeli za pomocą XML i procedurę przechowywaną w programie SQL Server 2008

Próbuję wstawić dane do tabeli robiąc to ja otrzymuję błąd

Cannot find column name or user define function "Tbl.Col.value" or aggregate Tbl.Col.value or the name is ambiguous

To jest moja procedura przechowywana:

ALTER PROCEDURE Ecal_InsertVerniercal_Sp 
    @exml XML 
AS 
BEGIN 
    INSERT INTO Vernier_Gauge_Calibration (Comment, Report_Number, Acceptance_Status, Calibration_Date, Approved_By) 
     SELECT 
      Tbl.Col.value('@Reamrk', 'varchar(200)') AS Reamrk, 
      Tbl.Col.value('@ReportNo', 'nvarchar(255)') AS ReportNo, 
      Tbl.Col.value('@Status', 'varchar(MAX)') AS Status, 
      Tbl.Col.value('@CalDate', 'datetime') AS CalDate, 
      Tbl.Col.value('@CalBy', 'datetime') AS CalBy 
     FROM 
      @exml.nodes('/CalibrationData/CalInfo') AS Tbl (Col) 

    RETURN; 
END 
GO 

Oto mój XML, dynamicznie generowany w jQuery.

<calibrationdata> 
    <extreading> 
     <er> 
     </er> 
    </extreading> 

    <internalreading> 
     <ir> 
     </ir> 
    </internalreading> 

    <masterdata> 
     <mb1>110118</mb1> 
     <desc1>Vernier Caliper-Height-0-to-600</desc1> 
     <duedt1>02/06/2016</duedt1> 
     <rmk1>TL-14/VER-0154</rmk1> 
     <mb2> 
     </mb2> 
     <desc2> 
     </desc2> 
     <duedt2> 
     </duedt2> 
     <rmk2> 
     </rmk2> 
     <mb3> 
     </mb3> 
     <desc3> 
     </desc3> 
     <duedt3> 
     </duedt3> 
     <rmk3> 
     </rmk3> 
     <mb4> 
     </mb4> 
     <desc4> 
     </desc4> 
     <duedt4> 
     </duedt4> 
     <rmk4> 
     </rmk4> 
     <mb5> 
     </mb5> 
     <desc5> 
     </desc5> 
     <duedt5> 
     </duedt5> 
     <rmk5> 
     </rmk5> 
     <mb6> 
     </mb6> 
     <desc6> 
     </desc6> 
     <duedt6> 
     </duedt6> 
     <rmk16> 
     </rmk16> 
    </masterdata> 

    <calinfo> 
     <reamrk>fdg</reamrk> 
     <reportno>ALIL-2015-12-104-5</reportno> 
     <status1>Accepted</status1> 
     <caldate>31/12/2015</caldate> 
     <calby>Alok Sahu</calby> 
    </calinfo> 

    <visualpara> 
     <vp1>Clamp,,Lock,,Fine_Adjustment,,Rusty,,Damage,,Dent_Marks,,</vp1> 
     <vp2>External_Jaws,,Shims,,Jaw_Movement,,</vp2> 
    </visualpara> 
</calibrationdata> 
+0

można udostępnić format próbki swojego XML wartość '@ exml' – Arulkumar

+0

This [post] (http: // stackoverflo w.com/q/24527653/2451726) może dać ci pewien pomysł na twoje pytanie. – Arulkumar

+0

Witam wszystkich Dodałem xml w moim pytaniu, ponieważ nie wiem jak to udostępnić tutaj plz sprawdź to –

Odpowiedz

4
DECLARE @MyXML XML 
SET @MyXML = '<calibrationdata> 
    <extreading> 
     <er></er> 
    </extreading> 
    <internalreading> 
     <ir></ir> 
    </internalreading> 
    <masterdata> 
     <mb1>110118</mb1> 
     <desc1>Vernier Caliper-Height-0-to-600</desc1> 
     <duedt1>02/06/2016</duedt1> 
     <rmk1>TL-14/VER-0154</rmk1> 
     <mb2></mb2> 
     <desc2></desc2> 
     <duedt2></duedt2> 
     <rmk2></rmk2> 
     <mb3></mb3> 
     <desc3></desc3> 
     <duedt3></duedt3> 
     <rmk3></rmk3> 
     <mb4></mb4> 
     <desc4></desc4> 
     <duedt4></duedt4> 
     <rmk4></rmk4> 
     <mb5></mb5> 
     <desc5></desc5> 
     <duedt5></duedt5> 
     <rmk5></rmk5> 
     <mb6></mb6> 
     <desc6></desc6> 
     <duedt6></duedt6> 
     <rmk16></rmk16> 
    </masterdata> 
    <calinfo> 
     <reamrk>fdg</reamrk> 
     <reportno>ALIL-2015-12-104-5</reportno> 
     <status1>Accepted</status1> 
     <caldate>31/12/2015</caldate> 
     <calby>Alok Sahu</calby> 
    </calinfo> 
    <visualpara> 
     <vp1>Clamp,,Lock,,Fine_Adjustment,,Rusty,,Damage,,Dent_Marks,,</vp1> 
     <vp2>External_Jaws,,Shims,,Jaw_Movement,,</vp2> 
    </visualpara> 
</calibrationdata>' 


SELECT 
     Tbl.col.value('reamrk[1]', 'varchar(200)') AS Reamrk , 
     Tbl.col.value('reportno[1]', 'nvarchar(255)') AS ReportNo, 
     Tbl.col.value('status1[1]', 'varchar(MAX)') AS Status, 
     convert(datetime,(Tbl.col.value('caldate[1]', 'varchar(50)')),103) AS CalDate, 
     Tbl.col.value('calby[1]', 'varchar(100)') AS CalBy 
    FROM @MyXML.nodes('calibrationdata/calinfo') AS Tbl (col) 

Zmiana Tbl.col.value ('caldate [1]', 'VARCHAR (50)'), jak CalDate, do konwertowania (datetime (Tbl.col.value ('caldate [1]', 'varchar (50)')), 103) AS CalDate,

tutaj problem rozwiązany, proszę głosować w razie rozwiązać problem

+0

Dzięki za pomoc. Próbowałem go, ale nadal nie działa i "Tbl.col.value" show "nie może znaleźć nazwę kolumny lub funkcja definiowania użytkownika" Tbl.Col.value "lub agregować Tbl.Col.value lub nazwa jest niejednoznaczna" błąd. –

+0

udostępnić próbkę danych xml, dzięki czemu mogę lepiej pomóc –

+0

xml genereted nie jest w dobrym formacie, najpierw sprawdzić i wygenerować dobrze sformatowany xml następnie spróbuj –