将值从电子表格加载到Sql Server中的表
我必须将某种配方加载到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
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`