You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改SQL存储过程使其同时返回校验结果与匹配的公司名称

存储过程修改方案

你可以直接通过查询赋值一次性完成重复校验和公司名取值,避免多次扫描表,修改后的完整代码如下:

CREATE PROCEDURE [CoDb].[CompanyAttribute_RunDataValidation]
    @AttributeId INT,
    @Value VARCHAR(255),
    @ValidationType SMALLINT,
    @Operation SMALLINT,
    @CompanyId INT
AS
BEGIN
    DECLARE @ValidationSuccess AS BIT = 1
    DECLARE @CompanyName AS VARCHAR(255) = ''

    -- 仅唯一校验场景执行逻辑
    IF @ValidationType = 1
    BEGIN
        -- Create操作场景
        IF @Operation = 1
        BEGIN
            SELECT TOP 1 @CompanyName = C.CompanyName
            FROM [CoDb].[CompanyAttribute] CA 
            INNER JOIN [CoDb].[Company] C on C.Id = CA.CompanyId 
            WHERE CA.AttributeId = @AttributeId 
              AND CA.Value = @Value 
              AND CA.IsDeleted = 0
        END
        -- Update操作场景
        ELSE IF @Operation = 2
        BEGIN
            SELECT TOP 1 @CompanyName = C.CompanyName
            FROM [CoDb].[CompanyAttribute] CA 
            INNER JOIN [CoDb].[Company] C on C.Id = CA.CompanyId 
            WHERE CA.AttributeId = @AttributeId 
              AND CA.Value = @Value 
              AND CA.CompanyId <> @CompanyId 
              AND CA.IsDeleted = 0
        END

        -- 如果查到了匹配的公司名,说明存在重复,校验不通过
        IF @CompanyName <> ''
        BEGIN
            SET @ValidationSuccess = 0
        END
    END

    -- 同时返回两个结果
    SELECT 
        @ValidationSuccess AS ValidationSuccess,
        @CompanyName AS DuplicateCompanyName
END

核心修改说明

  • 删掉了原来的EXISTS判断逻辑,改成直接查询TOP 1的公司名赋值给@CompanyName变量,一次查询完成存在性判断和取值,性能更高
  • 新增了判断:如果@CompanyName不为空,说明存在重复记录,直接把校验结果设为不通过
  • 最终返回结果集包含两个字段:ValidationSuccess为布尔类型的校验结果,DuplicateCompanyName为匹配到的重复公司名称,如果没有重复则返回空字符串
  • 如果存在多个公司使用相同编号的场景,你可以把TOP 1改成字符串拼接逻辑,返回所有重复的公司名,按需调整即可

内容的提问来源于stack exchange,提问作者Eugene Sukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:48:02