如何在SP中使用XML字符串输入来删除基于两个列值的行

我正在尝试使用XML输入从表中删除多行。删除基于两个列值:OwnerKey和QuestionNumber。 (两列都不包含唯一值。) 我能想到的唯一方法是构建一个包含XML输入值的临时表(即 - 2列),然后根据临时表和目标表的JOIN发出DELETE。 [如果有人有更好的方法,我会全力以赴。] 我现在遇到的问题是CREATE PROC失败并显示“无效列名”消息 - 指向“QuestionNumber” - XML字符串中的第二个属性。 如果我在SELECT INTO语句中明确列出了两列,则会出现语法错误 - 所以我使用了SELECT *。这也不起作用。 谁能给我一个如何做到这一点的例子?
XML Input string (formatted here for readability):
-- <Answers>
--     <WebUser OwnerKey="104" QuestionNumber="1"/>
--     <WebUser OwnerKey="104" QuestionNumber="3"/>
-- </Answers>
SP:
CREATE PROCEDURE WebUserDeleteAnswer 
    @DeleteXMLString text
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @hDoc int
    EXEC sp_xml_preparedocument @hDoc OUTPUT,
        @DeleteXMLString

    SELECT * INTO #temp     
--      OwnerKey                
--      INTO #temp      
    FROM OPENXML(@hdoc, 'Answers/WebUser', 2)

    DELETE FROM WebUser 
    WHERE ( WebUser.OwnerKey = OwnerKey 
        AND WebUser.wu_QuestionNumber = **QuestionNumber**)

    DROP TABLE #temp

    EXEC sp_xml_removedocument @hDoc

END
GO
弄清楚了。需要修改SELECT和DELETE命令: (为了清楚起见,将#temp更改为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
    
已邀请:
弄清楚了。需要更改DELETE命令:         开始         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
    

要回复问题请先登录注册