我对XML相当陌生,正在寻找一种从存储过程下面部分的输入参数中使用XML的方法(使用SQL Server 2012)。XML是通过JS / Ajax提交的,看起来像这样:
var xmlMain = '<root><title>' + title + '</title><summary>' + summary + '</summary><post>' + post + '</post><departmentID>' + departmentID + '</departmentID></root>';
SQL中的参数定义为:
@xmlMain xml
要从XML中进行选择,请执行以下操作:
SELECT [Xml_Tab].[Cols].value('(title)[1]', 'nvarchar(100)'), [Xml_Tab].[Cols].value('(summary)[1]', 'nvarchar(500)'), [Xml_Tab].[Cols].value('(post)[1]', 'nvarchar(max)'), [Xml_Tab].[Cols].value('(departmentID)[1]', 'int') FROM @xmlMain.nodes('/root') AS [Xml_Tab]([Cols])
我不知道的是如何将以下内容应用于以下内容:
UPDATE RC_Posts SET title = @title, summary = @summary, post = @post, departmentID = @departmentID WHERE postID = @postID
尝试像这样更新。
UPDATE A SET title = b.title, summary = b.summary, post = b.post, departmentID = b.departmentID FROM RC_Posts A JOIN (SELECT title=[Xml_Tab].[Cols].value('(title)[1]', 'nvarchar(100)'), summary=[Xml_Tab].[Cols].value('(summary)[1]', 'nvarchar(500)'), post=[Xml_Tab].[Cols].value('(post)[1]', 'nvarchar(max)'), departmentID=[Xml_Tab].[Cols].value('(departmentID)[1]', 'int'), PostID=[Xml_Tab].[Cols].value('(postID)[1]', 'int') FROM @xmlMain.nodes('/root') AS [Xml_Tab]([Cols])) B ON a.postID = b.postID