【发布时间】:2012-01-04 11:32:12
【问题描述】:
对于像下面这样的表架构
CREATE TABLE [dbo].[Employee](
[EmployeeId] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Location] [nvarchar](50) NOT NULL,
[Skills] [xml] NOT NULL,
[Projects] [nvarchar](400) NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
向表中插入数据时,我只想插入 <SkillSet> 的子标签,但似乎 <SkillSet> 连同它的子元素一起插入到 Skill xml 列中。
declare @doc NVARCHAR(MAX)
declare @idoc INT
select @doc = '<Request Type="InsertEmployee" CRUD="C">
<Employee>
<EmployeeId>1</EmployeeId>
<Name>Deeptechtons</Name>
<Location>USA</Location>
<SkillSet>
<Skill>C#</Skill>
<Skill>SQL Server 2005</Skill>
<Skill>ASP.net</Skill>
</SkillSet>
<Projects>
<Project>LowBin</Project>
<Project>Maskin</Project>
</Projects>
</Employee>
</Request>'
exec sp_xml_preparedocument @idoc output,@doc
insert into Employee (
EmployeeId
,[Name]
,Location
,Skills,
Projects
)
SELECT NEWID()
,[Name]
,Location
,Skills
,Projects
FROM OPENXML(@idoc,'Request/Employee',2)
WITH
(
[Name] NVARCHAR(50)
,Location NVARCHAR(50)
,Skills XML 'SkillSet'
,Projects NVARCHAR(400)
)
exec sp_xml_removedocument @idoc
问题
如何只插入
<Skillset>的子元素而不是整个标签及其子元素。我预计
Projects也将被插入,但只插入第一个项目标签的Lowbin内容。你能更正我的代码吗?
【问题讨论】:
标签: sql-server sql-server-2005 xquery-sql