【发布时间】:2018-01-24 19:01:58
【问题描述】:
我正在尝试将数据从 xml 文件插入到临时表中,问题是我可以一次输入一行数据:
DECLARE @tblCountry TABLE
(
CountryCode nvarchar(5),
CountryName nvarchar(50)
)
INSERT INTO @tblCountry(CountryCode, CountryName)
SELECT --DISTINCT
x.v.value('(/countries/country/@code)[1]','VARCHAR(5)'),
x.v.value('(/countries/country/text())[1]','VARCHAR(50)')
FROM @countryXML.nodes('/countries/country') x(v)
SELECT CountryCode, CountryName FROM @tblCountry
但是当我试图把它放在一个循环中时,我无法让它工作:
create proc spcountry
@count int
AS
BEGIN
DECLARE @countryXML XML
SET @countryXML = '<countries>
<country code="AF" iso="4">Afghanistan</country>
<country code="ZW" iso="716">Zimbabwe</country>
</countries>'
DECLARE @tblCountry TABLE
(
CountryCode nvarchar(5),
CountryName nvarchar(50)
)
SET @count = 1
WHILE (@count < 238)
BEGIN
INSERT INTO @tblCountry(CountryCode, CountryName)
SELECT --DISTINCT
x.v.value('(/countries/country/@code)[sql:variable("@count")]','VARCHAR(5)'),
x.v.value('(/countries/country/text())[[sql:variable("@count")]]','VARCHAR(50)')
FROM @countryXML.nodes('/countries/country') x(v)
set @count = @count + 1
END
END
SELECT CountryCode, CountryName FROM @tblCountry
我正在关注此链接的解决方案: XML data type method “value” must be a string literal
【问题讨论】:
-
您是否尝试使用循环来获取顶部的@count 行?
-
不,我有那么多行,所以我数了数并运行到 238
标签: sql sql-server temp-tables