-2

我必须将 Excel 数据插入数据库。Excel数据的结构是

Service    General    SBI    BOB   
Luxury      300       300    250   
Apartment   200       200    150   
villa       500       400    300   

它必须以这种格式发送到数据库

Service     Category    Rate

Luxury      General     300 
Luxury        SBI       300
Luxury        BOB       250
Apartment   General     200
Apartment     SBI       200
Apartment     BOB       150
villa       General     500
villa         SBI       400
villa         BOB       300

问题:1:Excel 工作表中的列数未知(最多 200)。

我已将 Excel 工作表转换为 XML 文档,并将其作为参数传递给 SQL Server。现在如何使用未知列是最大的问题。

如果有人以前这样做过,请简要说明如何做到这一点。xml 是我的xmldocument,我将其传递给我的BillingConfig procedure.

SqlCommand cmd = new SqlCommand("BillingConfig", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@info", SqlDbType.VarChar).Value = xml.InnerXml;

帮助表示赞赏

4

1 回答 1

1

这可以Cursor在 SqlServer 中使用。

  1. 使用获取所有列名

    SELECT DISTINCT CAST(Attribute.Name.query('local-name(.)') AS VARCHAR(100))
    Columnname  FROM @xml.nodes('//@*') Attribute(Name)
    
  2. 验证列

  3. 在这些上应用光标以将列转换为行

    DECLARE @id VARCHAR(10)
    declare @loc varchar(25)
    set @loc = '/MainItem/SubItem';
    
    declare @query varchar(max)        
    
    DECLARE myCursor CURSOR LOCAL FAST_FORWARD FOR
        SELECT * FROM @tempcolumnname
    
    OPEN myCursor
    FETCH NEXT FROM myCursor INTO @id
    
    WHILE @@FETCH_STATUS = 0 
    BEGIN
       set @query = 'SELECT * FROM OPENXML(@hdoc, '+@loc+', 3) WITH (xyz int)'
       exec (@query)
    
       FETCH NEXT FROM myCursor INTO @id
    END
    
于 2013-05-07T04:41:38.630 回答