Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
如何在SP中使用XML字符串输入根据两个列值删除行_Xml_Stored Procedures - Fatal编程技术网

如何在SP中使用XML字符串输入根据两个列值删除行

如何在SP中使用XML字符串输入根据两个列值删除行,xml,stored-procedures,Xml,Stored Procedures,我正在尝试使用XML输入从表中删除多行。删除基于两列值:OwnerKey和QuestionNumber。(两列都不包含唯一值。) 我所能想到的唯一方法是构建一个包含XML输入值(即2列)的临时表,然后基于临时表和目标表的联接发出DELETE。[如果有人有更好的方法,我洗耳恭听。] 我现在遇到的问题是,CREATE过程失败,出现了一条“Invalid Column name”消息,指向XML字符串中的第二个属性“QuestionNumber” 如果在SELECT INTO语句中显式列出两列,则会出

我正在尝试使用XML输入从表中删除多行。删除基于两列值:OwnerKey和QuestionNumber。(两列都不包含唯一值。)

我所能想到的唯一方法是构建一个包含XML输入值(即2列)的临时表,然后基于临时表和目标表的联接发出DELETE。[如果有人有更好的方法,我洗耳恭听。]

我现在遇到的问题是,CREATE过程失败,出现了一条“Invalid Column name”消息,指向XML字符串中的第二个属性“QuestionNumber”

如果在SELECT INTO语句中显式列出两列,则会出现语法错误-因此我使用了SELECT*。这也不行

谁能给我举个例子说明如何做到这一点

XML Input string (formatted here for readability):
-- <Answers>
--     <WebUser OwnerKey="104" QuestionNumber="1"/>
--     <WebUser OwnerKey="104" QuestionNumber="3"/>
-- </Answers>


我明白了。需要修改选择和删除命令:

(为了清晰起见,将#temp更改为XmlTable


我明白了。需要更改删除命令: 开始 声明@hDoc int EXEC sp_xml_preparedocument@hDoc OUTPUT, @DeleteXMLString

    SELECT * INTO XmlTable  
    FROM OPENXML(@hdoc, 'Answers/WebUser', 2) 
    WITH (OwnerKey int '@OwnerKey',
          QuestionNumber int '@QuestionNumber') 


    DELETE WebUser
    FROM WebUser
        INNER JOIN XmlTable ON
        (XmlTable.OwnerKey = WebUser.OwnerKey)
        AND (XmlTable.QuestionNumber = WebUser.wu_QuestionNumber)

    EXEC sp_xml_removedocument @hDoc
    DROP TABLE XmlTable
    BEGIN 
    DECLARE @hDoc int
    EXEC sp_xml_preparedocument @hDoc OUTPUT,
        @DeleteXMLString

    SELECT * INTO XmlTable  
    FROM OPENXML(@hdoc, 'Answers/WebUser', 2) 
    WITH (OwnerKey int '@OwnerKey',
          QuestionNumber int '@QuestionNumber') 


    DELETE WebUser
    FROM WebUser
        INNER JOIN XmlTable ON
        (XmlTable.OwnerKey = WebUser.OwnerKey)
        AND (XmlTable.QuestionNumber = WebUser.wu_QuestionNumber)

    EXEC sp_xml_removedocument @hDoc
    DROP TABLE XmlTable
    SELECT * INTO XmlTable  
    FROM OPENXML(@hdoc, 'Answers/WebUser', 2) 
    WITH (OwnerKey int '@OwnerKey',
          QuestionNumber int '@QuestionNumber') 


    DELETE WebUser
    FROM WebUser
        INNER JOIN XmlTable ON
        (XmlTable.OwnerKey = WebUser.OwnerKey)
        AND (XmlTable.QuestionNumber = WebUser.wu_QuestionNumber)

    EXEC sp_xml_removedocument @hDoc
    DROP TABLE XmlTable