@

描述

给定n个关于X的不等式,问最多有多少个成立。

每个不等式为如下的形式之一:

X < C

X <= C

X = C

X > C

X >= C

输入

第一行一个整数n。

以下n行,每行一个不等式。

数据范围:

1<=N<=50,0<=C<=1000

输出

一行一个整数,表示最多可以同时成立的不等式个数。

交的时候总是WA,看了后面的讨论才知道。
X>5 和 X <6答案应该是2,因为有可能是中间的小数。
然后解决办法就是把给你的所有的数字都乘以2。
那么就可以考虑中间的数了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

char s[101][100];
int num[101];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%s%s%d",s[i],s[i],&num[i]);
        num[i]*=2;
    }
    int ans=0;
    for(int i=-1; i<=2001; i++)
    {
        int sum=0;
        for(int j=0; j<n; j++)
        {
            if(strcmp(s[j],"=")==0&&num[j]==i)sum++;
            else if(strcmp(s[j],">")==0&&num[j]<i)sum++;
            else if(strcmp(s[j],">=")==0&&num[j]<=i)sum++;
            else if(strcmp(s[j],"<")==0&&num[j]>i)sum++;
            else if(strcmp(s[j],"<=")==0&&num[j]>=i)sum++;
        }
        ans=max(sum,ans);
    }
    printf("%d\n",ans);
    return 0;
}



/****** Object: StoredProcedure [dbo].[Gp_AddDataToAuditingBill] Script Date: 2025-07-07 15:08:24 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* 作者:谢吉康 日期:2005-8-4 描述:增加新的单据到AuditingBill中 新Carpa平台后重新调整 卢春 2009-06 添加询价单,请购单的修改状态 周华 2013-11-27 */ ALTER PROCEDURE [dbo].[Gp_AddDataToAuditingBill] ( @BillNumberId varchar(8000), --单据编号 @BillIndexType int, --单据类型 0.订单 1.借欠 2.一般物流单据 @OperatorETypeID VARCHAR(100) --操作员ID号 ) --@encode$-- AS SET NOCOUNT ON DECLARE @OperatorId varchar(100), @BillType int, @ETypeId varchar(100), @STypeID VARCHAR(100), @BillDate datetime, @BillCode varchar(256), @AuditingId int, @AuditingLevel int, @AuditingLevel1 int, @AuditingType int, @InOrOut varchar(10), @Checke VARCHAR(50) --制单人 BEGIN TRAN -- 判断状态是否待审核或审核通过,是则退出 IF EXISTS(SELECT TOP 1 BillNumberId FROM AuditingBill WHERE BillNumberId = @BillNumberId AND BillIndexType = @BillIndexType AND IfAudit <> -1) BEGIN ROLLBACK TRAN RETURN -2 END -- 审核不通过,则删除掉原记录,重新写记录 IF EXISTS(SELECT TOP 1 BillNumberId FROM AuditingBill WHERE BillNumberId = @BillNumberId AND BillIndexType = @BillIndexType AND IfAudit = -1) BEGIN DELETE AuditingBillDetail WHERE BillNumberId=@BillNumberId AND BillIndexType=@BillIndexType DELETE AuditingBill WHERE BillNumberId = @BillNumberId AND BillIndexType = @BillIndexType IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -6 END END IF @BillIndexType = 0 -- 订单 BEGIN --修改订单状态 IF EXISTS(SELECT TOP 1 BillNumberId FROM OrderIndex WHERE BillNumberId = @BillNumberId) BEGIN UPDATE OrderIndex SET IfAudit = 0 WHERE BillNumberId = @BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM OrderIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType = 1 -- 借欠 BEGIN --修改订单状态 IF EXISTS(SELECT TOP 1 BillNumberId FROM dbo.LendIndex WHERE BillNumberId = @BillNumberId) BEGIN UPDATE LendIndex SET IfAudit = 0 WHERE BillNumberId = @BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM LendIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType = 2 -- 一般物流单据 BEGIN --修改184报价单状态 IF EXISTS(SELECT TOP 1 BillNumberId FROM BillIndex WHERE BillNumberId = @BillNumberId AND BillType=184) BEGIN UPDATE BillIndex SET IfAudit = 0 WHERE BillNumberId = @BillNumberId AND BillType=184 IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END -- 修改询价单状态 IF EXISTS(SELECT TOP 1 BillNumberId FROM BillIndex WHERE BillNumberId = @BillNumberId AND BillType =185) BEGIN UPDATE BillIndex SET IfAudit = 0 WHERE BillNumberId = @BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM BillIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType=3 --请购单 BEGIN -- 修改请购单状态 IF EXISTS(SELECT TOP 1 BillNumberId FROM RequestIndex WHERE BillNumberId = @BillNumberId AND BillType=204) BEGIN UPDATE dbo.RequestIndex SET IfAudit = 0 WHERE BillNumberId = @BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM dbo.RequestIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType=4 --提成单 BEGIN ---- 修改请购单状 IF EXISTS(SELECT TOP 1 BillNumberId FROM CommissionBillNew WHERE BillNumberId = @BillNumberId) BEGIN UPDATE dbo.CommissionBillNew SET BillState = 3 WHERE BillNumberId = @BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = 311, @ETypeId = Checke, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM dbo.CommissionBillNew WHERE BillNumberId = @BillNumberId END IF @BillIndexType=5--发票单据 BEGIN IF EXISTS(SELECT TOP 1 BillNumberid FROM ReceiptBillIndex WHERE BillNumberID=@BillNumberId) BEGIN UPDATE dbo.ReceiptBillIndex SET IfAudit=0 WHERE BillNumberID=@BillNumberId IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -1 END END --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM ReceiptBillIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType = 7 --实物库存 BEGIN --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ETypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM FactIndex WHERE BillNumberId = @BillNumberId END IF @BillIndexType = 9--门店类 BEGIN --获取单据的信息 SELECT @BillType = BillType, @ETypeId = ApplyEtypeId, @STypeID = STypeID, @BillDate = BillDate, @BillCode = BillCode, @Checke=Checke FROM PosAllotApplyBillIndex WHERE BillNumberId = @BillNumberId END --判断单据是否有审核流程 SELECT @AuditingId = AuditingId, @AuditingLevel = AuditingLevel, @AuditingLevel1 = AuditingLevel1, @AuditingType = AuditingType FROM AuditingFlowSet WHERE BillType = @BillType AND STypeID=@STypeID AND IfUse = 1 --写入审核表(AuditingBill)中 INSERT INTO AuditingBill ( BillNumberId, AuditingId, AuditingSteps, IfAudit, ETypeId, BillDate, BillCode, BillDetail, BillIndexType, PassSteps, Checke )VALUES( @BillNumberId, @AuditingId, REPLACE(REPLICATE(@AuditingLevel,@AuditingLevel),@AuditingLevel,'2'), 0, @ETypeId, @BillDate, @BillCode, '', @BillIndexType, REPLACE(REPLICATE(@AuditingLevel,@AuditingLevel),@AuditingLevel,'2'), @Checke ) IF @@ROWCOUNT = 0 BEGIN ROLLBACK TRAN RETURN -3 END ---------------------------------------------------------------------------------------------- --【定制】销售订单制单人与审核人相同时校验余额是否大于订单金额 IF EXISTS(select TOP 1 1 FROM orderindex WHERE BillNumberId = @BillNumberId AND SaleWay = 1) BEGIN DECLARE @DealBTypeID VARCHAR(50) DECLARE @OrderTotal numeric(24, 10) DECLARE @BillTotal numeric(24, 10) -- 获取订单的DealBTypeID SELECT @DealBTypeID = dealbtypeid FROM orderindex WHERE BillNumberId = @BillNumberId SELECT @BillTotal = ISNULL(SUM(totalmoney),0) - ISNULL(SUM(preferencemoney),0) - ISNULL(( SELECT SUM(totalmoney) FROM orderindex WHERE billtype = 300 AND dealbtypeid=@DealBTypeID AND IfAudit = 1 ),0) FROM billindex WITH ( NOLOCK ) WHERE billtype IN ( 4, 189 ) AND dealbtypeid=@DealBTypeID AND ifcheck = 't' AND redword = '0' SELECT @OrderTotal = totalmoney FROM orderindex WHERE billnumberid=@BillNumberId IF @BillTotal < @OrderTotal BEGIN ROLLBACK TRAN RETURN -9 END END --------------------------------------------------------------------------------------------- -- PassSteps代表整单审核通过需要经历的步骤,与原因相关 DECLARE @PassSteps VARCHAR(50) SET @PassSteps = REPLACE(REPLICATE(@AuditingLevel,@AuditingLevel),@AuditingLevel,'2') CREATE TABLE #temp( BillNumberID INT, BillType NUMERIC(4, 0), PassFlag bit, Reason VARCHAR(500), value VARCHAR(500), AuditingStep int ) INSERT #temp EXEC GP_BillAudtingCheckReason @BillNumberId,@OperatorETypeID,@BillIndexType,'1',-1,0 DECLARE @i INT,@j INT,@stepReason VARCHAR(500),@stepValue VARCHAR(500) -- 处理特审原因 DECLARE CURSOR_str CURSOR FOR SELECT DISTINCT Reason,Value,AuditingStep FROM #temp WHERE PassFlag = 0 ORDER BY AuditingStep OPEN CURSOR_str FETCH NEXT FROM CURSOR_str INTO @stepReason,@stepValue,@i WHILE @@FETCH_STATUS = 0 BEGIN UPDATE AuditingBill SET StepReasons = ISNULL(StepReasons,'') + '0ж' + RTRIM(@stepReason + ' ' + ISNULL(@stepValue,'')) + 'жи' WHERE BillNumberID = @BillNumberId AND BillIndexType = @BillIndexType FETCH NEXT FROM CURSOR_str INTO @stepReason,@stepValue,@i END CLOSE CURSOR_str DEALLOCATE CURSOR_str -- 写入每级相关原因 SET @j = 0 DECLARE CURSOR_str CURSOR FOR SELECT AuditingStep,Reason,value FROM #temp WHERE PassFlag = 0 ORDER BY AuditingStep OPEN CURSOR_str FETCH NEXT FROM CURSOR_str INTO @i,@stepReason,@stepValue WHILE @@FETCH_STATUS = 0 BEGIN IF @stepReason<>'...' BEGIN UPDATE AuditingBill SET StepReasons = ISNULL(StepReasons,'') + CAST(@i AS VARCHAR(10)) + 'ж' + RTRIM(@stepReason + ' ' + ISNULL(@stepValue,'')) + 'жи' WHERE BillNumberID=@BillNumberId AND BillIndexType=@BillIndexType IF @i <> @j BEGIN SET @PassSteps = LEFT(@PassSteps,@i-1) + '1' + RIGHT(@PassSteps,LEN(@PassSteps)-@i) END SET @j = @i END FETCH NEXT FROM CURSOR_str INTO @i,@stepReason,@stepValue END CLOSE CURSOR_str DEALLOCATE CURSOR_str UPDATE AuditingBill SET PassSteps=@PassSteps WHERE BillNumberID=@BillNumberId AND BillIndexType=@BillIndexType -- 设置灯泡提醒 IF @AuditingType = 1 DECLARE AuditingCursor CURSOR FOR SELECT ETypeId FROM AuditingFlowDetail WHERE AuditingId = @AuditingId AND AuditingStep IN (SELECT TOP 1 AuditingStep FROM #temp WHERE PassFlag=0 ORDER BY AuditingStep) IF @AuditingType = 3 DECLARE AuditingCursor CURSOR FOR SELECT ETypeId FROM AuditingFlowDetail WHERE AuditingId = @AuditingId AND AuditingStep IN (SELECT AuditingStep FROM #temp WHERE PassFlag=0 GROUP BY AuditingStep) OPEN AuditingCursor FETCH NEXT FROM AuditingCursor INTO @OperatorId WHILE @@FETCH_STATUS = 0 BEGIN -- 是否有修改他人草稿的权限 0.有 1.无 DECLARE @ifCanEditOtherDraft INT EXEC @ifCanEditOtherDraft = GP_CheckLimit @OperatorId, 135 -- 是否有审核他人草稿的权限 0.有 1.无 DECLARE @AuditingOtherDraft int EXEC @AuditingOtherDraft = GP_CheckLimit @OperatorID,467 DECLARE @checkeWhere VARCHAR(50) IF @ifCanEditOtherDraft = 0 OR @AuditingOtherDraft = 0 SET @checkeWhere = '%%' ELSE SET @checkeWhere = @OperatorId DECLARE @ifAlerm INT SET @ifAlerm = 0 IF @BillType IN (17,21)-- AND @AuditingType = 1 BEGIN -- 检查仓库权限是否有效 0.有效 1.无效 DECLARE @StockLimit INT EXEC @StockLimit = GP_CheckLimit @OperatorID,454 -- 调拨单中,仓库的权限无效 IF EXISTS(SELECT TOP 1 1 FROM Userconfig WHERE ConfigName = 'MoveInOutKLimit' AND Value = '0') OR @StockLimit = 0 BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex WHERE BillNumberId = @BillNumberId AND ETypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND (KTypeID IN (SELECT * FROM F_GetManDetailKType(@OperatorId)) OR KTypeID2 IN (SELECT * FROM F_GetManDetailKType(@OperatorId))) AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END ELSE BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex WHERE BillNumberId = @BillNumberId AND ETypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND (KTypeID IN (SELECT * FROM F_GetManDetailKType(@OperatorId)) AND KTypeID2 IN (SELECT * FROM F_GetManDetailKType(@OperatorId))) AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END END ELSE IF @BillType IN (300,301) -- 订单 BEGIN IF EXISTS( SELECT TOP 1 1 FROM OrderIndex WHERE BillNumberId = @BillNumberId AND ETypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND BTypeId IN (SELECT * FROM F_GetManDetailBType(@OperatorId)) AND KTypeId IN (SELECT * FROM F_GetManDetailKType(@OperatorId)) ) SET @ifAlerm = 1 END ELSE IF @BillType IN (57) BEGIN IF EXISTS( SELECT BillNumberId FROM AdPriceBill WHERE BillNumberId=@BillNumberId AND ChangeAllStock=1 ) BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex WHERE BillNumberId = @BillNumberId AND ETypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND (BTypeId IN (SELECT * FROM F_GetManDetailBType(@OperatorId)) OR ISNULL(BTypeId,'')='') AND (KTypeId='00000') AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END ELSE BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex WHERE BillNumberId = @BillNumberId AND ETypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND (BTypeId IN (SELECT * FROM F_GetManDetailBType(@OperatorId)) OR ISNULL(BTypeId,'')='') AND (KTypeId IN (SELECT * FROM F_GetManDetailKType(@OperatorId)) OR ISNULL(KTypeId,'')='') AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END END ELSE IF @BillType IN (328,327) --门店单据 BEGIN IF EXISTS( SELECT TOP 1 1 FROM PosAllotApplyBillIndex WHERE BillNumberId = @BillNumberId AND ApplyEtypeId IN (SELECT * FROM F_GetManDetailEType(@OperatorId)) AND (KTypeID IN (SELECT * FROM F_GetManDetailKType(@OperatorId)) OR InKtypeId IN (SELECT * FROM F_GetManDetailKType(@OperatorId))) AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END ELSE BEGIN --2018-08-15 谢吉康 以前的算法不合理,优化 DECLARE @BTypeId VARCHAR(500) SELECT @BTypeId = BTypeID FROM BillIndex WHERE BillNumberid = @BillNumberId IF @BTypeId <> '' BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex B INNER JOIN (SELECT * FROM F_GetManDetailEType(@OperatorId)) E ON B.ETypeId = E.TypeId INNER JOIN (SELECT * FROM F_GetManDetailBTypeForAudit(@OperatorId,@BTypeId)) MB ON MB.TypeId = B.btypeid INNER JOIN (SELECT * FROM F_GetManDetailKType(@OperatorId)) MK ON (MK.TypeId = B.KTypeId OR ISNULL(KTypeId,'')='') WHERE BillNumberId = @BillNumberId AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END ELSE BEGIN IF EXISTS( SELECT TOP 1 1 FROM BillIndex B INNER JOIN (SELECT * FROM F_GetManDetailEType(@OperatorId)) E ON B.ETypeId = E.TypeId INNER JOIN (SELECT * FROM F_GetManDetailKType(@OperatorId)) MK ON (MK.TypeId = B.KTypeId OR ISNULL(KTypeId,'')='') WHERE BillNumberId = @BillNumberId AND checke LIKE @checkeWhere ) SET @ifAlerm = 1 END END IF @ifAlerm = 1 BEGIN IF @AuditingType = 1 BEGIN UPDATE AuditingFlowDetail SET AuditingAlerm = 1 WHERE AuditingId = @AuditingId AND ETypeId = @OperatorId AND AuditingStep IN (SELECT TOP 1 AuditingStep FROM #temp WHERE PassFlag=0 ORDER BY AuditingStep) END IF @AuditingType = 3 BEGIN UPDATE AuditingFlowDetail SET AuditingAlerm = 1 WHERE AuditingId = @AuditingId AND ETypeId = @OperatorId AND AuditingStep IN (SELECT AuditingStep FROM #temp WHERE PassFlag=0 GROUP BY AuditingStep) END END FETCH NEXT FROM AuditingCursor INTO @OperatorId END CLOSE AuditingCursor DEALLOCATE AuditingCursor --处理同一个人审核人的情况 IF EXISTS(SELECT TOP 1 1 FROM dbo.Userconfig WHERE ConfigName = 'samepersonchecked' AND Value = '1') BEGIN IF EXISTS(SELECT TOP 1 1 FROM AuditingFlowSet WHERE BillType = @BillType AND AuditingType = 3) AND EXISTS(SELECT TOP 1 1 FROM AuditingFlowDetail WHERE BillType = @BillType AND AuditingStep <> 0 AND ETypeID = @OperatorETypeID) --会签审核 BEGIN EXEC GP_BillAuditingDeal @OperatorETypeID,@BillNumberId,'1','自动审核通过',@BillIndexType,'','' END ELSE BEGIN --处理审核消息 DECLARE @nextStep INT IF EXISTS(SELECT TOP 1 AuditingStep FROM AuditingBillDetail WHERE BillNumberID = @BillNumberId AND BillIndexType = @BillIndexType) SELECT TOP 1 @nextStep = AuditingStep + 1 FROM AuditingBillDetail WHERE BillNumberID = @BillNumberId AND BillIndexType = @BillIndexType ORDER BY AuditingStep DESC ELSE SET @nextStep = 1 SELECT * INTO #AuditingFlowDetail FROM AuditingFlowDetail WHERE BillType = @BillType AND AuditingStep <> 0 AND ETypeID = @OperatorETypeID WHILE EXISTS(SELECT TOP 1 1 FROM #AuditingFlowDetail WHERE AuditingStep = @nextStep) BEGIN EXEC GP_BillAuditingDeal @OperatorETypeID,@BillNumberId,'1','自动审核通过',@BillIndexType,'','' SET @nextStep += 1 END DROP TABLE #AuditingFlowDetail END END --单据审核流程完成后自动过账 DECLARE @RE INT EXEC @RE = GP_CheckLimit @OperatorETypeID,2659 --处理价格跟踪 IF @BillType IN (184,185,300,301) BEGIN EXEC dbo.GP_BatchPassPT @billnumberid=@BillNumberId,@billtype=@BillType END --自动过账 IF @billtype NOT IN(184,185,300,313,204,185,301,22,326,162,163) AND EXISTS(SELECT TOP 1 1 FROM dbo.AuditingBill WHERE BillNumberID = @BillNumberId AND BillIndexType = @BillIndexType AND IfAudit = 1) AND @RE = 0 BEGIN EXEC dbo.Gp_Auditing @nBillID = @BillNumberId, -- numeric @szCheckMan = @Checke, -- varchar(50) @szPID = '', -- varchar(1000) @chvOpID = @OperatorETypeID, -- varchar(50) @KTypeID = '', -- varchar(50) @billtype = @BillType, -- int @voucherMsg = '', -- varchar(50) @vipcentinfo='', @AssetMsg='', @VipCardCode = '' ,--VARCHAR(200) @CommissionConfirm = 0 ,--INT @strReturnBillCode = '' --VARCHAR(200) IF EXISTS(SELECT TOP 1 1 FROM dbo.Userconfig WHERE ConfigName = 'BillCodeCreateTime' AND Value = 2) EXEC dbo.GP_SaveBillCode_Seed @intBillNumberID=@BillNumberId,@intBillType=@BillType,@dBillDate=@billdate,@strBillCode=@BillCode IF(@BillType IN(17,21,404,327,328)) --没有btypeid 的不要插入,否则报错 begin INSERT INTO BillOperateLog(billnumberid,operatetype,etypeid,OperateTime,ip,billcode,billdate,ifcheck,ntotalmoney,billtype) VALUES(@billnumberid,'自动审核过账',@OperatorETypeID,GETDATE(),'',@billcode,@billdate,'t',0,@billtype) END ELSE BEGIN INSERT INTO BillOperateLog(billnumberid,operatetype,etypeid,OperateTime,ip,billcode,billdate,ifcheck,btypeid,ntotalmoney,billtype) VALUES(@billnumberid,'自动审核过账',@OperatorETypeID,GETDATE(),'',@billcode,@billdate,'t',ISNULL(@btypeid,''),0,@billtype) END --自动审核过账,反写一大堆数量,状态等.正常过账反写以前是写在代码里面的,没有在存储过程里,所以要单独写出来 EXEC Gp_Auditing_UpdateQtyorState @BillNumberId, @BillType END DROP TABLE #temp --成功,退出 COMMIT TRAN RETURN 0
最新发布
07-10
<think>我们正在分析存储过程 Gp_AddDataToAuditingBill 的功能和实现细节。由于没有提供具体的存储过程代码,我们无法直接给出其内部逻辑。但是,我们可以根据常见的审计账单添加操作来推测其可能的功能和实现,并给出一般性的指导。 通常情况下,这类存储过程可能用于向审计账单表(假设为AuditingBill)中添加数据。其功能可能包括: 1. 参数验证:检查输入参数的有效性。 2. 数据插入:将经过验证的数据插入到目标表中。 3. 错误处理:在插入过程中捕获错误并返回错误信息。 4. 事务控制:确保操作的原子性。 为了查看存储过程的实现,我们可以使用以下SQL语句: ```sql -- 查看存储过程的定义 EXEC sp_helptext '[dbo].[Gp_AddDataToAuditingBill]' ``` 或者 ```sql -- 在SQL Server Management Studio中,可以通过对象资源管理器找到该存储过程,右键选择“修改”来查看和编辑代码。 ``` 如果我们想要修改存储过程,可以使用`ALTER PROCEDURE`语句。 假设我们需要修改存储过程,一般步骤如下: 1. 获取当前存储过程的定义(使用`sp_helptext`或脚本方式)。 2. 使用`ALTER PROCEDURE`语句重新定义存储过程,并在其中进行修改。 下面是一个修改存储过程的示例模板: ```sql ALTER PROCEDURE [dbo].[Gp_AddDataToAuditingBill] @Param1 DataType1, @Param2 DataType2, ... -- 其他参数 AS BEGIN SET NOCOUNT ON; -- 在此处编写修改后的逻辑 -- 例如:插入数据 INSERT INTO dbo.AuditingBill (Column1, Column2, ...) VALUES (@Param1, @Param2, ...) -- 可以添加错误处理 IF @@ERROR <> 0 BEGIN -- 处理错误 RETURN -1 END RETURN 0 END ``` 注意:在修改存储过程之前,建议先备份原始存储过程的脚本,以便在需要时恢复。 由于没有具体的存储过程代码,以上仅为一般性指导。如果用户能提供存储过程的定义,我们可以进行更详细的分析。 §§相关题§§ 1. 如何查看SQL Server中存储过程的定义? 2. 修改存储过程时需要注意哪些事项? 3. 存储过程执行出现错误,如何调试?</think>### SQL Server 存储过程 `[dbo].[Gp_AddDataToAuditingBill]` 功能分析与实现 #### 一、功能分析(基于命名和常见场景) 1. **核心功能** 向审计账单表(`AuditingBill`)添加数据,可能涉及: - 插入新审计记录(如财务审计、操作审计) - 关联业务操作(如订单审批、权限变更) - 记录操作者、时间戳等元数据 2. **典型业务场景** - 当系统发生关键操作(如金额修改、权限调整)时自动触发 - 手动添加审计条目(如管理员补录审计记录) - 批量导入审计数据 3. **关键参数推测**(需实际代码确认) ```sql @UserID NVARCHAR(50), -- 操作者ID @ActionType INT, -- 操作类型(如新增/修改/删除) @TargetID INT, -- 操作目标ID(如订单ID) @Details NVARCHAR(MAX), -- 操作详情(JSON/XML格式) @AuditTime DATETIME = NULL -- 审计时间(默认当前时间) ``` #### 二、查看存储过程定义 使用以下 SQL 获取实现细节: ```sql -- 查看定义 EXEC sp_helptext '[dbo].[Gp_AddDataToAuditingBill]' -- 或查询系统表 SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.Gp_AddDataToAuditingBill') ``` #### 三、典型实现结构(示例) ```sql CREATE PROCEDURE [dbo].[Gp_AddDataToAuditingBill] @UserID NVARCHAR(50), @ActionType INT, @TargetID INT, @Details NVARCHAR(MAX), @AuditTime DATETIME = NULL AS BEGIN SET NOCOUNT ON; -- 参数校验 IF @UserID IS NULL OR @ActionType IS NULL BEGIN RAISERROR('参数错误:UserID/ActionType不能为空', 16, 1); RETURN -1; END -- 默认时间处理 IF @AuditTime IS NULL SET @AuditTime = GETDATE(); -- 插入审计记录 INSERT INTO dbo.AuditingBill ( UserID, ActionType, TargetID, Details, AuditTime ) VALUES ( @UserID, @ActionType, @TargetID, @Details, @AuditTime ); -- 返回新记录ID(假设表有自增ID) SELECT SCOPE_IDENTITY() AS NewAuditID; END ``` #### 四、修改存储过程步骤 1. **备份原定义** ```sql -- 生成备份脚本 SELECT definition AS BackupScript INTO #ProcBackup FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.Gp_AddDataToAuditingBill'); ``` 2. **使用 `ALTER PROCEDURE` 修改** ```sql ALTER PROCEDURE [dbo].[Gp_AddDataToAuditingBill] -- 参数列表 @NewParam INT = 0 -- 示例:新增参数 AS BEGIN -- 修改后的逻辑(例如添加日志记录) EXEC dbo.LogAuditAction @Action='ModifyBill'; -- 原插入逻辑(需保留) INSERT INTO AuditingBill(...) VALUES (...); END ``` #### 五、注意事项 1. **权限要求** - 修改存储过程需 `ALTER PROCEDURE` 权限 - 调试时使用 `TRY...CATCH` 块: ```sql BEGIN TRY EXEC dbo.Gp_AddDataToAuditingBill @UserID='admin', ...; END TRY BEGIN CATCH SELECT ERROR_MESSAGE() AS ErrorMsg; END CATCH ``` 2. **影响分析** - 修改后可能影响依赖此存储过程的应用程序 - 需测试关联业务场景(如审计报表生成) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值