解决 MSSQL 存储过程 不识别 uuid 中划线问题

解决 MSSQL 存储过程 不识别 uuid 中划线问题

原因:存储过程 调用uuid参数处 引号问题

-- =============================================
-- Author:Hwq
-- Create date:20220408
-- Description:查询车辆设备运单信息
-- =============================================

CREATE PROCEDURE [dbo].[p_Web_Query_Common_QueryVehicleEquipmentWaybillInfo]

@FAgentGUID uniqueidentifier, -- 部门id
@FKey nvarchar(max) ,-- 关键字
@FSelectType int,-- 查询类型   -1: 全部查询 0:按车辆查;1:按设备查;2:按运单查;3按客户id
@FPageSize int,
@FPageIndex int

AS 
BEGIN
DECLARE @StartRows int, @EndRows int, @SqlString varchar(max) ;
SET
@StartRows =(@FPageIndex-1)* @FPageSize + 1;

SET
@EndRows = @FPageIndex * @FPageSize;
    
    IF @FSelectType = 0
    BEGIN 
            SET @SqlString = 'AND trd.FVehicleName LIKE  ''%' + @FKey + '%'''
    END
    ELSE IF @FSelectType = 1
    BEGIN 
            SET @SqlString = 'AND  trd.FAssetID LIKE ''%'+ @FKey + '%'''
    END
    ELSE IF @FSelectType = 2
    BEGIN 
            SET @SqlString = 'AND  trd.FWaybill  LIKE ''%' + @FKey + '%'''
    END
    ELSE IF @FSelectType = 3
    BEGIN 
            SET @SqlString = 'AND   taa.FCustomerID  LIKE ''%' + @FKey + '%'''
    END
    ELSE
    BEGIN 
            SET @SqlString = ' '
    END
    BEGIN 
        EXEC ('
                SELECT Count(1) FTotalCount
                FROM T_RouteDeparture trd
                LEFT JOIN T_AdminAsset taa ON
                trd .FAssetGUID = taa.FGUID
                LEFT JOIN T_AdminVehicle tav ON
                trd .FVehicleGUID = tav.FGUID
                WHERE trd.FStatus = 0
                AND tav.FAgentGUID  in (select FAgentGUID from dbo.f_Common_Query_SuperAdminAgentGUIDListByGUID( '''+@FAgentGUID +'''))
                '+ @SqlString+';
        ');
        EXEC('
       WITH cte AS( SELECT  
            tav.FAgentGUID  AS FAgentGUID ,
            trd.FVehicleGUID AS  FVehicleGUID, 
            trd.FVehicleName AS  FVehicleName ,
            trd.FWaybill  AS FWaybill ,
            trd.FAssetGUID  AS FAssetGUID ,
            trd.FAssetID AS FAssetID, 
            taa.FCustomerID AS FCustomerID ,
            ROW_NUMBER() OVER(ORDER BY  tav.FAgentGUID desc) AS RowNo
        FROM  T_RouteDeparture trd 
        LEFT JOIN  T_AdminAsset taa ON trd .FAssetGUID = taa.FGUID 
        LEFT JOIN  T_AdminVehicle tav ON trd .FVehicleGUID = tav.FGUID 
        WHERE  
        trd.FStatus =0
        AND tav.FAgentGUID  in (select FAgentGUID from dbo.f_Common_Query_SuperAdminAgentGUIDListByGUID( '''+@FAgentGUID +'''))
         ' + @SqlString+' 
        )SELECT cte.* from cte where 
        cte.RowNo BETWEEN '+@StartRows+' AND '+@EndRows+';            
        ')
    END
    
END 

在这里插入图片描述

问题解决:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过设置自增长值的起始值和步长来解决主键自增长不连续的问题。可以使用 ALTER TABLE 命令来修改表的自增长属性,例如:ALTER TABLE table_name AUTO_INCREMENT = 1; 将自增长值的起始值设置为1。如果需要设置步长,可以在后面加上 INCREMENT = step_value。 ### 回答2: 在MySQL数据库,主键自增长不连续的问题通常出现在以下情况下:删除操作后,再执行插入操作时新的记录主键自增值与已删除记录的主键值不连续。 解决这个问题的方法有两种: 1. 删除重置主键自增值:可以通过删除当前表的所有记录,并使用ALTER TABLE语句来重置主键自增的值。先使用DELETE FROM语句删除表所有记录,再使用ALTER TABLE语句设置主键自增的起始值。 例如,假设主键字段名为id,表名为table_name,可以执行以下SQL语句来解决问题: DELETE FROM table_name; ALTER TABLE table_name AUTO_INCREMENT = 1; 2. 使用TRUNCATE TABLE操作:TRUNCATE TABLE语句可以一次性删除表的所有记录,并且会重置主键自增的值。这种方法相比于第一种方法更简单,但也要谨慎使用,因为TRUNCATE TABLE语句不仅会删除数据,还会删除表的结构。 例如,可以执行以下SQL语句来解决问题: TRUNCATE TABLE table_name; 无论使用哪种方法,都需要谨慎操作,以免误删除表的数据或破坏数据完整性。在实际应用,也要注意对于不连续的主键自增值可能对业务逻辑带来的影响,例如可能会导致与其他表之间的关联关系失效等。因此,在设计数据库时要确保主键的自增值不会频繁删除和插入,以避免这个问题的出现。 ### 回答3: 在MySQL数据库,主键自增长不连续的问题可能出现在以下情况下: 1. 删除数据:当删除了表的某些记录后,主键的自增长值不会改变,导致主键的增长不连续。 2. 回滚事务:当使用事务进行插入数据操作时,如果事务被回滚,那么已经分配的自增长值会被浪费,从而导致主键的增长不连续。 解决这个问题,可以采取以下方法: 1. 使用TRUNCATE TABLE:相对于DELETE语句,使用TRUNCATE TABLE语句可以更快地删除表的所有记录,并且重置主键的自增长值为初始值。 2. 使用ALTER TABLE和AUTO_INCREMENT:可以使用ALTER TABLE语句重新定义表的自增长值,将主键的自增长值设为当前最大值+1。 3. 使用锁表和自定义函数:可以通过对需要插入的表加锁来实现自定义的主键生成方式。通过自定义函数来生成主键,可以确保主键的连续增长。 4. 使用UUID或GUID作为主键:UUID和GUID是全局唯一标识符,可以作为主键来确保唯一性,同时也解决了主键自增长不连续的问题。这种方法适用于分布式系统。 无论采用哪种方法,需要根据具体的业务需求和环境来选择合适的解决方案。在使用主键自增长时,需要注意数据库锁的并发性能和数据一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值