【问题标题】:Insert into sql table from another table and new values through sql procedure通过sql过程从另一个表和新值插入sql表
【发布时间】:2019-09-16 13:31:11
【问题描述】:

我有一个具有以下定义的表直径集

table diameterset(
      id,
      projectid,
      diameterid,
      depth,
      diameter
)

现在我的表有如下数据

Id     ProjectID      Diameter ID       Depth      Diameter
1       1              dia1_1_1          1           2
2       1              dia1_1_2          2           4
3       1              dia1_1_3          3           6
4       1              dia1_1_4          4           8

5       1              dia1_2_1          1           6
6       1              dia1_2_2          2           10
7       1              dia1_2_3          3           12
8       1              dia1_2_4          4           30

9       2              dia2_1_1          1           30    
10      2              dia2_1_2          2           34
.
.
.
.
.
and so on

我想像下面这样填充另一个表应变集

StrainID :- 将diameterID 与相同的projectID 连接

应变:- 获取项目的直径集并从第二个中删除第一个直径并除以,即 (b-a)/a

ID      ProjectID  StrainID              Depth       Strain         
1       1          dia1_1_1_dia1_2_1_1      1            2      i.e.(6-2)/2               
2       1          dia1_1_2_dia1_2_2_2      2            1.5    i.e.(10-4)/4             
3       1          dia1_1_3_dia1_2_3_3      3            2      i.e.(12-6)/6
4       1          dia1_1_4_dia1_2_4_4      4            2.75   i.e.(30-8)/8

我已经设法得到了投影、应变和深度,但不知道如何计算应变列

非常感谢任何帮助。

我试过下面的代码

CREATE PROCEDURE [dbo].[PCalculationStrain]
--paramters neeeded
    @projectID nvarchar(50)=null,
    @DiameterID1 varchar(255)=null,  
    @DiameterID2 varchar(255)=null       
AS
declare 
    @DiameterID nvarchar(255)=@DiameterID1 + '|' + @DiameterID2,
    @StrainID nvarchar(255),
    @cnt int =1,
    @angle varchar(10),
    @Strain nvarchar(50),
    @serachDiameterID1 varchar(255),
    @serachDiameterID2 varchar(255),
    @selectCnt int,
    @count int =0
WHILE @cnt < 9

BEGIN
    SET @angle = CONVERT(varchar,@cnt);
    set @StrainID = @projectID + '_S_' + @DiameterID  + '_' + @angle
    --INSERT dbo.DHDStrain(ProjectID,StrainID,AngleNb,StrainName) VALUES(@projectID,@StrainID,@angle,@DiameterID);
    INSERT dbo.DHDStrain(ProjectID,StrainID,AngleNb,StrainName) VALUES(@projectID,@StrainID,@angle,@DiameterID);

    set @serachDiameterID1 = @ProjectID + '_D_' + @DiameterID1 + '_' + @angle
    set @serachDiameterID2 = @ProjectID + '_D_' + @DiameterID2 + '_' + @angle

    insert into DHDStrainSet(StrainID,Depth,ProjectID) 
        SELECT @StrainID,Depth,ProjectID FROM DiameterSet where DiameterID=@serachDiameterID1 and projectID=@projectID

    SET @cnt = @cnt + 1;
END

【问题讨论】:

  • 请标记您正在使用的数据库。

标签: sql stored-procedures insert


【解决方案1】:

您不需要光标。这似乎是自联接:

select min(ds1.id) as id,
       concat(ds1.diameter_id, ds2.diameter_id) as diameter_id,
       ds1.depth,
       (ds2.diameter - ds1.diameter) as strain
from diameterset ds1 join
     diameterset ds2
     on ds1.projectid = ds2.projectid and
        ds1.depth = ds2.depth and
        ds1.diameter_id < ds2.diameter_id;

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多