【发布时间】:2021-07-21 14:05:56
【问题描述】:
我想将数据插入到具有动态命名的临时全局表中:
SET @SQL = '
CREATE TABLE '+Cast(@TableName as VARCHAR(60))+'
(
Adr VARCHAR(1000)
)';
execute (@SQL);
我能够检索我需要的值,例如:
SELECT Recipient.query('.').value('.','varchar(15)')
FROM @not.nodes('Data/MgRec' ) xmlData(ref) CROSS APPLY
ref.nodes('Recipient') AS Recipients(Recipient) ;
这给了我一些价值的清单.. 现在当我想插入这些值时:
SET @SQL = 'INSERT INTO '+ Cast(@TableName as VARCHAR(60))+' (Adr)
Select Recipient.query(''.'').value(''.'',''varchar(15)'')
FROM '+ Cast(@not as VARCHAR(60)) +'.nodes(''Data/MgRec'' ) xmlData(ref) CROSS APPLY
ref.nodes(''Recipient'') AS Recipients(Recipient)' ;
execute (@SQL);
SET @SQL = 'select * from ' +Cast(@TableName as VARCHAR(60))
execute (@SQL);
我在这里卡住了,错误:
目标字符串太小,无法表示 XML 实例
有什么建议吗?
下面@not xml:
<Data>
<MgRec>
<Recipient>10800234</Recipient>
<Recipient>24900005</Recipient>
<Recipient>24900004</Recipient>
<Recipient>10201026</Recipient>
<Recipient>66600019</Recipient>
<Recipient>14042243</Recipient>
</MgRec>
</Data>
【问题讨论】:
-
你只需要一个
.nodes这样.nodes('Data/MgRec/Recipient')
标签: sql-server xml tsql sql-insert