SQL

在临时表中打开XML插入-SQL 2005

发布于 2021-05-20 11:10:27

我有一个存储过程,正在传递一个简单的XML:

'<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'

我在SQL中有一个@temp表,其中有一个ProductId列:

DECLARE @Temp TABLE (
ProductId NVARCHAR(10)
)

我需要编写一条插入语句,该语句将遍历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)

我不断收到错误:

Must declare the table variable "@test".
关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-05-20
    为面试而生,有面试问题,就找面试哥。
    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看