【问题标题】:Insert data in to table using xml and stored procedure in SQL Server 2008在 SQL Server 2008 中使用 xml 和存储过程将数据插入表中
【发布时间】:2016-03-28 18:24:51
【问题描述】:

我正在尝试将数据插入到表中,同时我得到一个 错误

找不到列名或用户定义函数“Tbl.Col.value”或聚合 Tbl.Col.value 或名称不明确

这是我的存储过程:

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

这是我的 XML,它在 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>

【问题讨论】:

  • 你能分享一下你的XML值的示例格式@exml
  • 这个post 可能会对您的问题有所了解。
  • 大家好,我已经在我的问题中添加了 xml,因为我不知道如何在这里分享它,请检查一下

标签: sql sql-server xml sql-server-2008 stored-procedures


【解决方案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)

     

更改Tbl.col.value('caldate[1]', 'varchar(50)') AS CalDate,convert(datetime,(Tbl.col.value('caldate[1]', 'varchar(50)')),103) AS CalDate,

【讨论】:

  • 感谢您的帮助。我试过了,但它仍然无法正常工作,并且“Tbl.col.value”显示“找不到列名或用户定义函数“Tbl.Col.value”或聚合 Tbl.Col.value 或名称不明确”错误。跨度>
  • 分享您的 xml 数据样本,以便我能更好地提供帮助
  • 你生成的xml格式不对,先检查生成格式正确的xml再试试
  • @@ Trilochan Sahu 检查我的答案,我相信这会解决问题
  • 感谢您的帮助,但 sql server 中出现以下错误:-Msg 515,级别 16,状态 2,过程 Ecal_InsertVerniercal_Sp,第 5 行无法将值 NULL 插入列 'Calibration_Date',表 'New_DB .dbo.Vernier_Gauge_Calibration';列不允许空值。插入失败。声明已终止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多