如何使用openxml获取新插入的行的ID?

时间:2012-06-02 19:00:06

标签: sql sql-server tsql

我有一个XML块,我想插入数据库。数据库包含3个表,即itemMappinglinkscategoryLinks表只有XML链接,category表将有来自XML的category

<item>
<link>http://google.com</link>

<category>search engine</category>
<category>android</category>
<category>gmail</category>
</item>

令我困惑的是,'itemMaping'表包含以下列:

IDLinkIDCategoryID

itemMapping表中,我必须插入新插入行的linkID和categoryID。因此,根据示例XML itemMapping表,每个类别将有3条记录,但要在此表中插入记录,我需要从上面linkIDcategoryID。我怎么能做到这一点?如果可能的话,我想在单个SP中执行此操作。

2 个答案:

答案 0 :(得分:1)

您好请考虑以下表格:

Country Table
CountryID CountryName LastEditUser

Province table
ProvinceID ProvinceName CountryID LastEditUser

考虑CountryID和ProvinceID是标识列。

IN SQL你可以使用单个存储过程向这两个表插入记录,看看快速示例

CREATE PROCEDURE InsertProvince
(
@ProvinceName VARCHAR(128),
@CountryName VARCHAR(128),
@LastEditUser VARCHAR(128)
)
AS
    DECLARE @CountryID INT

    INSERT INTO Country
    (CountryName, LastEditUser)
    VALUES
    (@CountryName, @LastEditUser)

    @CountryID = SCOPE_IDENTITY();

    INSERT INTO Province
    (ProvinceName, CountryID, LastEditUser)
    VALUES
    (@ProvinceName, @CountryID, @LastEditUser)
END

SQL Server有一个名为scope_identity的函数,它返回插入同一范围内的标识列的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内。

答案 1 :(得分:0)

插入Links并将带有LinkID的{​​{1}}捕获到变量中。插入scope_identity()并在表变量中捕获生成的ID。使用该表变量作为Category的插入源。

假设你的桌子看起来像这样。

ItemMapping

您可以使用XML变量create table Category ( CategoryID int identity primary key, Name varchar(50) ) create table Links ( LinkID int primary key identity, Link varchar(50) ) create table ItemMapping ( LinkID int references Links(LinkID), CategoryID int references Category(CategoryID), primary key(LinkID, CategoryID) ) 执行此操作。

@XML

SE-Data