将值从电子表格加载到Sql Server中的表

将值从电子表格加载到Sql Server中的表,sql,batch-file,import,Sql,Batch File,Import,我必须将某种配方加载到Sql Server数据库中 我收到电子表格形式的食谱 配方的数据库格式如下所示: 存储过程: set @IdParameter = (select top 1 id_parameter from Parameters where pa_code ='Macchina') if (select count(*) from Opera6010.dbo.BatParameters

我必须将某种配方加载到Sql Server数据库中

我收到电子表格形式的食谱

配方的数据库格式如下所示:

存储过程:

set @IdParameter = (select top 1 id_parameter 
                    from Parameters 
                    where pa_code ='Macchina') 

if (select count(*) 
    from Opera6010.dbo.BatParameters (nolock) 
    where id_batch = @IdBatch 
        and id_parameter = @IdParameter) = 0 

begin 
    insert into BatParameters with (rowlock) 
    (id_batch, id_parameter, bp_value) 
    values (@IdBatch, @IdParameter, @Macchina) 
end 

else 
begin 
    update BatParameters with (rowlock) 
    set bp_value = @Macchina  
    where id_batch = @IdBatch 
        and id_parameter = @IdParameter 
end
首先,我认为不明智的解决方案是:

以表格形式导入电子表格,格式相同 在该表上定义一个光标,每次提取都会加载一个配方ID和配料值列表。 做大量的复制、过去和替换工作来编写如下代码:

设置@IDIGREDIENT=选择前1个ingr\u id 配料 其中ingr_desc='Ingredit1' 使用rowlock插入接收元件 配方id,输入id,值 值@IdRecipe、@IDigredient、@Ingredient1 设置@return\u status=@@error

我想知道是否存在一种更聪明的方法来创建如下循环:

对于输入表的每一行 be@RecipeId是从游标读取的配方ID的值

每种成分 获取相对于当前读取的值的列名 获取具有ingr_desc(如列名)的成分的ingr_id 在表RecingElements中设置配方id、ingr_id和值

你觉得怎么样

提前感谢。

签出,它可以让您从谷歌表单更新数据库。基本上,您可以将表格选择到工作表中,以收到的新配方为轴心,并将行附加到工作表中选定的表格中。标记要插入的新行,并设置更新计划

你可以阅读更多关于它的内容


希望有帮助

如果您认为我使用了游标,但它不太好,因此我认为应该在其上添加一个循环,那么现在可能是尝试基于集合的方法的时候了。嗨,Jacob,谢谢您的及时评论。坦白地说,我在我的程序中看到的不太好的事情是复制、粘贴和替换24倍于我设置成分N的值/数量的部分。你能展示一下你的程序吗?听起来你可以通过更新和连接来实现这一点。给定IdBatch和IdParameter分别对应的配方ID和参数ID,我在代码中重复了20次相同的序列,如果从opera601.dbo.BatParameters nolock中选择count*,则只需替换成分的名称及其值的相关变量`set@IdParameter=select top 1id\u parameter from Parameters where pa_code='Macchina',id\u batch=@IdBatch和id\u parameter=@IdParameter=0就可以开始用rowlock插入BatParameters了id_batch、id_参数、bp_值@IdBatch、@IdParameter、@Macchina end else开始使用行锁集bp_值=@Macchina更新BATTarameters,其中id_batch=@IdBatch和id_参数=@IdParameter end`