Зачем использовать openxml на SQL Server 2008?
Это лучший вариант (я использовал varchar (max) в качестве типа данных, но введите все, что применимо). Обратите внимание, что вы должны объявить переменную как xml, а не как varchar.
SELECT
Row.Item.value('data(cell[1])', 'varchar(max)') As Prod,
Row.Item.value('data(cell[2])', 'varchar(max)') As Description,
Row.Item.value('data(cell[3])', 'varchar(max)') As Qty
FROM
@doc.nodes('//row') AS Row(Item)
Примечание. Если вы делаете это хранимой процедурой, вам может потребоваться включить следующее перед оператором select:
SET ARITHABORT ON -- required for .nodes
Если вы должны использовать openxml, хотя бы очистите его, когда закончите:
exec sp_xml_removedocument @idoc