像这样吗?
DECLARE @XmlVariable XML = '<parent_node> <category>Low</category> <category>Medium</category> <category>High</category> </parent_node>'INSERT INTO dbo.YourTargetTable(CategoryColumn) SELECt XTbl.Cats.value('.', 'varchar(50)') FROM @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)更新: 如果您 必须
使用旧的旧式存储过程并且不能更改它(这是我的首选方式),那么您将不得不自己进行逐行行(RBAR)循环,例如通过使用一个表变量:
-- declare temporary work tableDECLARE @RbarTable TABLE (CategoryName VARCHAr(50))-- insert values into temporary work tableINSERT INTO @RbarTable(CategoryName) SELECt XTbl.Cats.value('.', 'varchar(50)') FROM @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)-- declare a single categoryDECLARE @CategoryNameToBeInserted VARCHAr(50)-- get the first categorySELECt TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable-- as long as we have dataWHILE @CategoryNameToBeInserted IS NOT NULLBEGIN -- execute your stored procedure here..... EXEC sp_executesql N'dbo.YourStoredProcedure @CategoryName', N'@CategoryName VARCHAr(50)', @CategoryName = @CategoryNameToBeInserted -- delete the category we just inserted from the temporary work table DELETe FROM @RbarTable WHERe CategoryName = @CategoryNameToBeInserted -- see if we still have more categories to insert SET @CategoryNameToBeInserted = NULL SELECt TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable ORDER BY CategoryNameEND


