-2

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 は myです。xmldocumentこれを my に渡します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 に答える