在临时表中打开XML插入-SQL 2005
我有一个存储过程,其中传递一个简单的XML:在临时表中打开XML插入-SQL 2005,sql,sql-server,xml,insert,Sql,Sql Server,Xml,Insert,我有一个存储过程,其中传递一个简单的XML: '<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>' 我需要编写一个insert语句,它将循环遍历XML中的ProductId(可以是无限的),并继续插入@temp表中,直到XML不再有ProductId节点为止 涉及游标的解决方案不可行 以下是我尝试执行的代码: Declare @tes
'<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
我需要编写一个insert语句,它将循环遍历XML中的ProductId(可以是无限的),并继续插入@temp表中,直到XML不再有ProductId节点为止
涉及游标的解决方案不可行
以下是我尝试执行的代码:
Declare @test XML
SET @test = '<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
DECLARE @Temp TABLE(
ProductId NVARCHAR(10)
)
INSERT INTO @Temp(ProductId)
SELECT tab.col.value('./ProductId[1]','NVARCHAR(10)') AS 'ProductId'
FROM @test
CROSS APPLY
xml_data.nodes('//Products') AS tab(col)
您可以将xml放入另一个临时表中,然后从那里执行insert语句:
您可以将xml放入另一个临时表中,然后从那里执行insert语句:
刚刚添加了一个独立的代码来解释我的示例仍然会抛出一个错误!刚刚添加了一个独立的代码来解释我的示例仍然会抛出一个错误!试着只运行INSERT的SELECT部分,用xml字符串替换掉@test。确保works First不允许我在字符串上执行FROM。是的,需要使用OPENXML-请参阅我的更新答案。Ref:OPENXML:尝试只运行INSERT的SELECT部分,用xml字符串替换@test。确保works First不允许我在字符串上执行FROM。是的,需要使用OPENXML-请参阅我的更新答案。参考:OPENXML:
Declare @test XML
SET @test = '<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
DECLARE @Temp TABLE(
ProductId NVARCHAR(10)
)
INSERT INTO @Temp(ProductId)
SELECT tab.col.value('./ProductId[1]','NVARCHAR(10)') AS 'ProductId'
FROM @test
CROSS APPLY
xml_data.nodes('//Products') AS tab(col)
Must declare the table variable "@test".
DECLARE @test XML
SET @test = '<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
DECLARE @Temp TABLE(ProductId NVARCHAR(10))
DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @doc
INSERT INTO @Temp(ProductId)
SELECT t.value('./ProductId[1]','NVARCHAR(10)') AS 'ProductId'
FROM OPENXML(@docHandle, '//Products', 1) t
EXEC sp_xml_removedocument @docHandle
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<OutLookContact>
<Contact FirstName="Asif" LastName="Ghafoor" EmailAddress1="asifghafoor@my.web.pk" />
<Contact FirstName="Rameez" LastName="Ali" EmailAddress1="rameezali@my.web.pk" />
<Contact FirstName="Aneel" LastName="Maqsood" EmailAddress1="aneelmaqsood@my.web.pk" />
</OutLookContact>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
DECLARE @Temp TABLE(FirstName VARCHAR(250),LastName VARCHAR(250),Email1 VARCHAR(250))
INSERT INTO @Temp(FirstName,LastName,Email1)
SELECT *
FROM OPENXML (@idoc, '/OutLookContact/Contact',1)
WITH (FirstName varchar(50),LastName varchar(50),EmailAddress1 varchar(50))
select FirstName,LastName,Email1 from @Temp