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