DECLARE @nmSupport NUMERIC(14,4),@nmOutst NUMERIC(14,4),@chPart VARCHAR(16) SELECT @chPart = 'XXX' SELECT @nmOutst = 0 SELECT @nmSupport = 0 UPDATE acdb.PAC06.AC06004A SET nmSupport = CASE WHEN chPart = @chPart THEN CASE WHEN nmQty > @nmOutst THEN @nmOutst ELSE nmQty END ELSE CASE WHEN nmQty > nmOutst THEN nmOutst ELSE nmQty END END, nmOutst = CASE WHEN chPart = @chPart then case when @nmOutst>=@nmSupport then @nmOutst-@nmSupport else 0 end else nmOutst-nmSupport END, @nmOutst = CASE WHEN chPart = @chPart then case when @nmOutst>=@nmSupport then @nmOutst-@nmSupport else 0 end else nmOutst-nmSupport END, @nmSupport = case when chPart = @chPart then case when nmQty > @nmOutst then @nmOutst else nmQty end ELSE CASE WHEN nmQty > nmOutst THEN nmOutst ELSE nmQty END end, @chPart = chPart
时间: 2024-04-26 18:19:56 浏览: 142
这段代码是一个 SQL Server 的存储过程或者脚本,其中包含了一些变量的定义和赋值。具体来说,这段代码的作用是:
1. 声明了三个变量 @nmSupport、@nmOutst 和 @chPart,分别是数值类型和字符类型;
2. 把 @chPart 变量的值设为 'XXX';
3. 把 @nmOutst 变量的值设为 0;
4. 把 @nmSupport 变量的值设为 0;
5. 更新了 acdb.PAC06.AC06004A 表中的 nmSupport 和 nmOutst 字段,具体更新方式如下:
- 如果 chPart 字段等于 @chPart 变量的值,则 nmSupport 字段的值为 @nmOutst 和 nmQty 两者中较小的一个,nmOutst 字段的值为 @nmOutst 和 @nmSupport 的差值(如果 @nmOutst 大于等于 @nmSupport),或者为 0(如果 @nmOutst 小于 @nmSupport);
- 如果 chPart 字段不等于 @chPart 变量的值,则 nmSupport 字段的值为 nmQty 和 nmOutst 两者中较小的一个,nmOutst 字段的值为 nmOutst 和 nmSupport 的差值;
6. 最后,更新了 @nmOutst、@nmSupport 和 @chPart 变量的值,使其与更新后的表中的对应字段值相同或者符合上述条件。
相关问题
create trigger tr_insert on takes for insert as declare @sno varchar(5) declare @cno varchar(5) declare @credit numeric(3,0) select @sno=ID,@cno=course_id from inserted select @credit=credits from course where course_id=@cno update student set tot_cred=tot_cred+@credit where ID=@sno go
这是一个 SQL Server 数据库中的触发器,用于在 takes 表中插入数据时,更新 student 表中的 tot_cred 字段。具体来说,当在 takes 表中插入一条数据时,触发器会从 inserted 表中获取学生的 ID 和课程的 course_id,并从 course 表中获取该课程的学分 credits。然后,触发器会根据学生的 ID 和课程的学分更新 student 表中的 tot_cred 字段,以反映该学生现在已获得的总学分数。当所有更新完成后,触发器会结束执行。
USE [text] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getHcrStat1580] @wherestr varchar(200), @123 tinyint AS BEGIN SET NOCOUNT ON; DECLARE @class varchar(200),@grpstr varchar(50),@sql nvarchar(1200),@colstr varchar(400),@table varchar(20) set @table='[NGtbhcr1580]' set @class='class=case class when ''甲'' then ''甲班'' when ''乙'' then ''乙班'' when ''丙'' then ''丙班'' when ''丁'' then ''丁班'' else '''' end' if @123=0 begin set @colstr='rq=YMD,FUR_NO,'+@class set @grpstr=' group by YMD,FUR_NO,class' end else if @123=1 begin set @colstr='rq=YM,FUR_NO,'+@class set @grpstr=' group by YM,FUR_NO,class with rollup' end else if @123=2 begin set @colstr='rq=YY,FUR_NO,'+@class set @grpstr=' group by YY,FUR_NO,class with rollup' end set @sql='select '+@colstr+', tll=convert(numeric(14,2),sum(tll)), rzl350=convert(numeric(8,2),sum(rz350t)/sum(tll)*100), rzl450=convert(numeric(8,2),sum(rz450t)/sum(tll)*100), rzl600=convert(numeric(8,2),sum(rz600t)/sum(tll)*100), RZPJT=convert(numeric(8,2),sum(RZPJT)/nullif(sum(rznum),0)), JPL=convert(numeric(8,2),sum(JPL)/sum(tll)*100), FGL=convert(numeric(8,2),avg(FGL)), jtmp=convert(numeric(8,2),avg(jtmp)), N230=convert(numeric(8,2),avg(N230)) from '+@table+' where YMD between '+@wherestr+@grpstr exec sp_executesql @sql,N'@colstr varchar(400)',@colstr end
这是一个 SQL 存储过程,用于从表 [NGtbhcr1580] 中获取数据。根据传入的参数 @wherestr 和 @123,可以按照不同的时间粒度和分组方式进行聚合计算。具体的计算包括总产量 tll、350、450、600 等三个品种的入柜率 rzl、平均入柜票价 RZPJT、机台利用率 JPL、废品率 FGL、加热温度 jtmp 和 N230 等指标。
阅读全文