dbo.HistoryItems 這個表只要有新記錄插入,就往dbo.HistoryItems2表里面一比一復制過去,復制完了之后,再比較誤差率,@QueryNum2=(@StuffUsedNum-@TargetNum)/(@TargetNum/100);--自己計算誤差率,如果大于2或者小于-2的就直接等于目標。就是0誤差,或者自己設定一個指定的誤差值或者誤差率,寫入到實際使用值StuffUsedNum欄位。
CREATE TABLE [HistoryItems] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[HTID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[TrayNum] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[StuffID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[StuffName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[SiloID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[SiloName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[TargetNum] [numeric](12, 2) NULL ,
[FormulaNum] [numeric](12, 2) NULL ,
[StuffUsedNum] [numeric](12, 2) NULL ,
[QueryNum] [numeric](12, 2) NULL ,
[FallNum] [numeric](12, 2) NULL ,
[WaterRate] [numeric](12, 2) NULL ,
[SandRate] [numeric](12, 2) NULL ,
[CheckNum] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[FormulaOneNum] [numeric](12, 2) NULL ,
[StuffMark] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Fixed] [int] NULL ,
CONSTRAINT [PK_HistoryItems] PRIMARY KEY NONCLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
以上是表1,和表2的結構。
兩個一樣的,結構。
INSERT INTO [ZL_NCMS].[dbo].[HistoryItems]([ID], [HTID], [TrayNum], [StuffID], [StuffName], [SiloID], [SiloName], [TargetNum], [FormulaNum], [StuffUsedNum], [QueryNum], [FallNum], [WaterRate], [SandRate], [CheckNum], [FormulaOneNum], [StuffMark], [Fixed])
VALUES(<ID,int,>, <HTID,varchar(50),>, <TrayNum,varchar(50),>, <StuffID,varchar(50),>, <StuffName,varchar(50),>, <SiloID,varchar(50),>, <SiloName,varchar(50),>, <TargetNum,numeric(12,2),>, <FormulaNum,numeric(12,2),>, <StuffUsedNum,numeric(12,2),>, <QueryNum,numeric(12,2),>, <FallNum,numeric(12,2),>, <WaterRate,numeric(12,2),>, <SandRate,numeric(12,2),>, <CheckNum,ntext,>, <FormulaOneNum,numeric(12,2),>, <StuffMark,varchar(50),>, <Fixed,int,>)
上面是插入新記錄的。
--創建歷史記錄插入觸發器HistoryItems_Insert
CREATE TRIGGER HistoryItems_Insert ON dbo.HistoryItems
--只管插入新紀錄
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
--宣告欄位變數
declare @ID int, @QueryNum2 numeric(3,2),@TargetNum3 numeric(3,2),@StuffUsedNumnew numeric(9,2),@Stuffid2 int
declare @HTID varchar(50),@TrayNum varchar(50),@StuffID varchar(50),@StuffName varchar(50),@SiloID varchar(50),@SiloName varchar(50)
declare @TargetNum numeric(12,2),@FormulaNum numeric(12,2),@StuffUsedNum numeric(12,2),@QueryNum numeric(12,2),@FallNum numeric(12,2),@WaterRate numeric(12,2),@SandRate numeric(12,2),@CheckNum varchar(50),@FormulaOneNum numeric(12,2),@StuffMark varchar(50),@Fixed int
--取inserted表里的值賦值給變數
select @ID=ID,@HTID=HTID,@TrayNum=TrayNum,@StuffID=StuffID,@StuffName=StuffName,@SiloID=SiloID,@SiloName=SiloName,@TargetNum=TargetNum,@FormulaNum=FormulaNum,@StuffUsedNum=StuffUsedNum,@QueryNum=QueryNum,@FallNum=FallNum,@WaterRate=WaterRate,@SandRate=SandRate,@CheckNum='',@FormulaOneNum=FormulaOneNum,@StuffMark=StuffMark from INSERTed;
--原始真實記錄插入到新表中。
Insert Into dbo.HistoryItems2(HTID,TrayNum,StuffID,StuffName,SiloID,SiloName,TargetNum,FormulaNum,StuffUsedNum,QueryNum,FallNum,WaterRate,SandRate,CheckNum,FormulaOneNum,StuffMark) values (@HTID,@TrayNum,@StuffID,@StuffName,@SiloID,@SiloName,@TargetNum,@FormulaNum,@StuffUsedNum,@QueryNum,@FallNum,@WaterRate,@SandRate,@CheckNum,@FormulaOneNum,@StuffMark);
--取材料編碼id判斷是材料一還是材料一。
set @Stuffid2 =CAST(@StuffID as int);
--判斷目標大于的0,就達到條件修改
if (@TargetNum>0)
begin
set @QueryNum2=(@StuffUsedNum-@TargetNum)/(@TargetNum/100);--自己計算誤差率
--判斷材料為骨料和誤差率大于2
if (@Stuffid2 <=6 and @QueryNum2> 2)
--更新實際使用值StuffUsedNum欄位為取0位小數位用用目標+目標*固定誤差率1.5/100.得到1.5誤差率的目標值存入HistoryItems。
update HistoryItems set StuffUsedNum=round( @TargetNum + @TargetNum * 1.5/100,0) from inserted-- where HTID=@HTID ;
--判斷材料為骨料和誤差率大于2
else if (@Stuffid2 <=6 and @QueryNum2 < -2)
--更新實際使用值StuffUsedNum欄位為取0位小數位用用目標+目標*固定誤差率-1.5/100.得到1.5誤差率的目標值存入HistoryItems。
update HistoryItems set StuffUsedNum=round( @TargetNum + @TargetNum * -1.5/100,0) from inserted-- where HTID=@HTID ;
--判斷材料為粉料水,外加劑和誤差率大于2
else if (@Stuffid2 >=7 and @QueryNum2 >2)
--更新實際使用值StuffUsedNum欄位為取1位小數位用用目標+目標*固定誤差率1/100.得到1.5誤差率的目標值存入HistoryItems。
update HistoryItems set StuffUsedNum=round( @TargetNum + @TargetNum * 1/100,1) from inserted --where HTID=@HTID ;
--判斷材料為骨粉料水,外加劑和誤差率大于2
else if (@Stuffid2 >=7 and @QueryNum2 <-2)
--更新實際使用值StuffUsedNum欄位為取1位小數位用用目標+目標*固定誤差率-1/100.得到1.5誤差率的目標值存入HistoryItems。
update HistoryItems set StuffUsedNum=round( @TargetNum + @TargetNum * -1/100,1) from inserted --where HTID=@HTID ;
end
END
GO
復制到新表,沒問題,就是修改StuffUsedNum不成功。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/279470.html
標籤:疑難問題
上一篇:兩個沒有關系的表一對多拼接問題
下一篇:update更新"未成功"?
