Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从SQL Server中的XML参数中正确插入多个值?_Sql_Sql Server_Xml_Stored Procedures - Fatal编程技术网

如何从SQL Server中的XML参数中正确插入多个值?

如何从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 = '&

我对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 = '<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