我有一个XML块,我想插入数据库。数据库包含3个表,即itemMapping
,links
和category
。 Links
表只有XML链接,category
表将有来自XML的category
。
<item>
<link>http://google.com</link>
<category>search engine</category>
<category>android</category>
<category>gmail</category>
</item>
令我困惑的是,'itemMaping'表包含以下列:
ID
,LinkID
,CategoryID
在itemMapping
表中,我必须插入新插入行的linkID和categoryID。因此,根据示例XML itemMapping
表,每个类别将有3条记录,但要在此表中插入记录,我需要从上面linkID
和categoryID
。我怎么能做到这一点?如果可能的话,我想在单个SP中执行此操作。
答案 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