如何从SQL Server中的XML参数中正确插入多个值?
我对XML非常陌生 我使用JavaScript和Ajax将表单中的4个值作为XML字符串传递给存储过程,并使用SQL Server 2012传递给存储过程 我的JS(相关部分):如何从SQL Server中的XML参数中正确插入多个值?,sql,sql-server,xml,stored-procedures,Sql,Sql Server,Xml,Stored Procedures,我对XML非常陌生 我使用JavaScript和Ajax将表单中的4个值作为XML字符串传递给存储过程,并使用SQL Server 2012传递给存储过程 我的JS(相关部分): var title = $('#title').val(); var summary = $('#summary').val(); var post = $('#details').val(); var departmentID = $('#departmentID').val(); var xmlMain = '&
var title = $('#title').val();
var summary = $('#summary').val();
var post = $('#details').val();
var departmentID = $('#departmentID').val();
var xmlMain = '<root><title>' + title + '</title><summary>' + summary + '</summary><post>' + post + '</post><departmentID>' + departmentID + '</departmentID></root>';
INSERT INTO RC_Posts
(
title,
summary,
post,
departmentID
)
OUTPUT inserted.postID INTO @temp(insertRef)
SELECT (
SELECT ParamValues.title.value('.','nvarchar(100)')
FROM @xmlMain.nodes('/root/title') as ParamValues(title)
),
(
SELECT ParamValues.summary.value('.','nvarchar(500)')
FROM @xmlMain.nodes('/root/summary') as ParamValues(summary)
),
(
SELECT ParamValues.post.value('.','nvarchar(max)')
FROM @xmlMain.nodes('/root/post') as ParamValues(post)
),
(
SELECT ParamValues.departmentID.value('.','int')
FROM @xmlMain.nodes('/root/departmentID') as ParamValues(departmentID)
)
DECLARE @xml XML ='<root>
<title> XML Demo </title>
<summary> Working of Xml Nodes </summary>
<post> Developer </post>
<departmentID> CS </departmentID>
</root>'
SELECT title=[Xml_Tab].[Cols].value('(title)[1]', 'varchar(50)'),
summary=[Xml_Tab].[Cols].value('(summary)[1]', 'varchar(50)'),
post=[Xml_Tab].[Cols].value('(post)[1]', 'varchar(50)'),
departmentID=[Xml_Tab].[Cols].value('(departmentID)[1]', 'varchar(50)')
FROM @xml.nodes('/root')AS [Xml_Tab]([Cols])
title summary post departmentID
-------- -------------------- --------- ------------
XML Demo Working of Xml Nodes Developer CS
我的主要问题是:
位置。
我的通用JS、Ajax和SQL以前只传递标准nvarchar/int值,但现在我需要将它们作为XML传递,以便保留某些特殊字符等。您可以使用单个
XML节点()
函数从XML
像这样更改插入
INSERT INTO RC_Posts
(title,summary,post,departmentID)
OUTPUT inserted.postID
INTO @temp(insertRef)
SELECT [Xml_Tab].[Cols].value('(title)[1]', 'varchar(50)'),
[Xml_Tab].[Cols].value('(summary)[1]', 'varchar(50)'),
[Xml_Tab].[Cols].value('(post)[1]', 'varchar(50)'),
[Xml_Tab].[Cols].value('(departmentID)[1]', 'varchar(50)')
FROM @xml.nodes('/root')AS [Xml_Tab]([Cols])
示例:
var title = $('#title').val();
var summary = $('#summary').val();
var post = $('#details').val();
var departmentID = $('#departmentID').val();
var xmlMain = '<root><title>' + title + '</title><summary>' + summary + '</summary><post>' + post + '</post><departmentID>' + departmentID + '</departmentID></root>';
INSERT INTO RC_Posts
(
title,
summary,
post,
departmentID
)
OUTPUT inserted.postID INTO @temp(insertRef)
SELECT (
SELECT ParamValues.title.value('.','nvarchar(100)')
FROM @xmlMain.nodes('/root/title') as ParamValues(title)
),
(
SELECT ParamValues.summary.value('.','nvarchar(500)')
FROM @xmlMain.nodes('/root/summary') as ParamValues(summary)
),
(
SELECT ParamValues.post.value('.','nvarchar(max)')
FROM @xmlMain.nodes('/root/post') as ParamValues(post)
),
(
SELECT ParamValues.departmentID.value('.','int')
FROM @xmlMain.nodes('/root/departmentID') as ParamValues(departmentID)
)
DECLARE @xml XML ='<root>
<title> XML Demo </title>
<summary> Working of Xml Nodes </summary>
<post> Developer </post>
<departmentID> CS </departmentID>
</root>'
SELECT title=[Xml_Tab].[Cols].value('(title)[1]', 'varchar(50)'),
summary=[Xml_Tab].[Cols].value('(summary)[1]', 'varchar(50)'),
post=[Xml_Tab].[Cols].value('(post)[1]', 'varchar(50)'),
departmentID=[Xml_Tab].[Cols].value('(departmentID)[1]', 'varchar(50)')
FROM @xml.nodes('/root')AS [Xml_Tab]([Cols])
title summary post departmentID
-------- -------------------- --------- ------------
XML Demo Working of Xml Nodes Developer CS
这是完美的-非常感谢您的支持!你能告诉我[1]在这里是什么意思吗?@user2571510如果你在
根标记中有两个标题标记,那么[1]将获取第一个标题标记值[2]将获取第二个值,例如'XML Demo XML Demo1`这里[1]=XML Demo
和[2]=XML Demo1