/ / Wstaw dane do tabeli za pomocą xml i procedury składowanej w SQL Server 2008 - sql, sql-server, xml, sql-server-2008, procedury składowane

Wstaw dane do tabeli za pomocą xml i procedury składowanej w SQL Server 2008 - SQL, SQL Server, XML, SQL Server 2008, Procedury składowane

wprowadź opis obrazu tutaj

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

Nie można znaleźć nazwy kolumny lub funkcji zdefiniowanej przez użytkownika „Tbl.Col.value” lub agregować Tbl.Col.value lub nazwa jest niejednoznaczna

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, generowany dynamicznie 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>

Odpowiedzi:

4 dla odpowiedzi № 1
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)”) AS CalDate, do konwersja (datetime, (Tbl.col.value („caldate [1]”, „varchar (50)”)), 103) AS CalDate,

tutaj twój problem został rozwiązany, zagłosuj, jeśli rozwiążesz problem