我必须将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;
帮助欣赏
这可以在SqlServer中使用Cursor
来完成。
-
使用
获取所有列名SELECT DISTINCT CAST(Attribute.Name.query('local-name(.)') AS VARCHAR(100)) Columnname FROM @xml.nodes('//@*') Attribute(Name)
-
验证列
-
应用游标将列转换为行
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