VOL_常用记录!!-----后端

张开发
2026/4/21 8:12:59 15 分钟阅读

分享文章

VOL_常用记录!!-----后端
目录--后台扩展必须写在代码生成的Partial部分类里面一、sql记录触发器参照编写创建聚集索引(NCLUSTERED用于分组排序)或非聚集索引(NONCLUSTERED)两表中相同的项目名称来更新 Table1 中的项目编号标识列不能插入显示值sqlserver表添加列和注释Sqlserver/唯一查询Distinct失效Sqlserver/Mysql用表标识列删除重复项case条件逻辑控制结构sql常用函数记录sql备份表sql批量插入数据sql--NOT EXISTSsql-----case-when-else-endsql-----自查新增记录防止重复----not Exists条件--也可用自连接sql---自连接二、扩展记录1)service.cs扩展 表/明细表(CRUD导入导出)前后做一些操作 数据(CRUD导入导出)前后的处理参数或数据2.编辑3.新建4.查询5.导出6.导入2)执行原生sql3)重写后台表的权限-(只验证登没登陆不校验有没有权限)三、其余记录1、添加后端controller接口--添加新方法请求映射---参考如下注解和方法2、文件-------》Base64字符串2、前后端请求响应整个流程3、访问后端总是提示没权限(方法添加注解:AllowAnonymous)4、http请求接口模板(1)http调用自己服务接口(2)抛转其他系统5、读取配置文件appsettings.json6、缓存应用四、问题处理记录1、实体跟踪处理一、sql记录触发器参照编写CREATETRIGGERtrgAfterInsert_UpdateUDFsONYourTargetTableAFTERINSERTASBEGIN-- 禁用触发器的行为以避免递归触发SETNOCOUNTON;-- 更新目标表中的 UDF004 和 UDF005 字段UPDATEtSETUDF004=b.ProductName,UDF005=b.ProductStandardFROMYourTargetTable tINNERJOINinserted iONt.ID=i.IDINNERJOINBase_Product bONi.MatCode=b.ProductCodeWHEREi.REGRULE='MatRegSN';END;创建聚集索引(NCLUSTERED用于分组排序)或非聚集索引(NONCLUSTERED)CREATENONCLUSTEREDINDEXIX_FIT_METER_INFO_SERIAL_NO_DESCONFIT_METER_INFO(SERIAL_NODESC)两表中相同的项目名称来更新 Table1 中的项目编号UPDATETable1SETTable1.ProjectNumber=Table2.NewProjectNumberFROMTable1INNERJOINTable2ONTable1.ProjectName=Table2.ProjectName;标识列不能插入显示值-- 将IDENTITY_INSERT设置为ONSETIDENTITY_INSERTSys_RoleONINSERTINTOSys_Role(id,column2,column3)VALUES(123,'value2','value3')SETIDENTITY_INSERTSys_RoleOFF-- 插入完成后,记得将IDENTITY_INSERT设置回OFFsqlserver表添加列和注释ALTERTABLE[dbo].[要添加的表名]ADD[ModifyDate]数据类型NULLGOEXECsp_addextendedproperty'MS_Description',N'要添加的注释','SCHEMA',N'dbo','TABLE',N'要添加的表名','COLUMN',N'ModifyDate'Sqlserver/唯一查询Distinct失效WITHtempAS(SELECT'01'ASvouchertype,td.DOC_NOAScordercode,t.UDF001AScwhcode,t.CreateDateASddate,t.IDASccode,t.SUPPLIER_CODEAScvencode,0ASstates,t.CreateDate,t.DOC_NOASmes_code,ROW_NUMBER()OVER(PARTITIONBYt.IDORDERBYt.CreateDate)ASrnFROMT_ToERP_Main tINNERJOINT_ToERP_MBody tdONt.Id=td.IDWHEREXTYPE='purchase'ANDAuditState='N'ANDCreateDate'2024-12-08 15:06:00')SELECT*FROMtempWHERErn=1;--保留排序出的第一条记录Sqlserver/Mysql用表标识列删除重复项Mysql用表标识列删除重复项想基于某列(或几列)的值来决定保留哪一行(比如总是保留ID最小的那一行)DELETEt1FROMyour_table t1JOIN(SELECTMIN(id)asmin_id,column_with_duplicatesFROMyour_tableGROUPBYcolumn_with_duplicatesHAVINGCOUNT(*)1)t2ONt1.column_with_duplicates=t2.column_with_duplicatesANDt1.idt2.min_id;sqlserver用表标识列删除重复项对于支持窗口函数的数据库系统(如SQL Server、PostgreSQL、Oracle等)可以使用 ROW_NUMBER() 分配每个重复记录的行号,然后删除行号大于1的记录。WITHCTEAS(SELECT*,ROW_NUMBER()OVER(PARTITIONBYcolumn_with_duplicatesORDERBYid)asrnFROMyour_table)SELECT*FROMCTEWHERErn1;-- 查询要删除的DELETEFROMCTEWHERErn1;--保留第一个case条件逻辑控制结构常用于翻译字段不同的结果CASEcase_valueWHENwhen_valueTHENstatement_listELSEstatement_listENDas别名sql常用函数记录-- 当天时间范围条件CONVERT(DATE,GETDATE())ANDDATEADD(SECOND,-1,DATEADD(DAY,1,CONVERT(DATE,GETDATE())));-- 格式化时间format(CONVERT(datetime,BIDDING_TIME,120),'yyyy-MM-dd HH:mm:ss')-- 获取当前系统时间并格式转换 '2024-03-06 09:20:04'CONVERT(VARCHAR(19),GETDATE(),120)-- 时间转换 '11 12 2022 7:08PM' - ''2024-03-06 09:20:04''CONVERT(varchar(19),TRY_CONVERT(datetime,字段名,100),120)-- 时间转换 去除毫秒CONVERT(VARCHAR(19),字段名,120)-- cast显式转换数据类型将guid转换成字符串'JBWC'+CAST(newid()ASVARCHAR(50))ASNOTICE_NO,-- 截取字符段长度SUBSTRING(截取的字段,开始索引(从1开始),length)-- replace替换字符串中的某一子串的REPLACE(str,search_string,replacement_string)sql备份表在SQL中,如果你想从一个表(比如原表)创建一个内容完全一样的新表(比如原表_copy)在SQL Server、PostgreSQL等数据库,可以使用SELECT INTO语句。以下是具体的SQL命令:SELECT*INTOdawd_copyFROMdawd;在MySQL中则需要采用CREATE TABLE AS SELECT的方式:CREATETABLEdawd_copyASSELECT*FROMdawd;sql批量插入数据从Base_Advice_PrefixCode表里面查出字段然后批量插入到Sys_QuartzOptions这里面INSERTINTOSys_QuartzOptions(Id,TaskName,GroupName,CronExpression,Method,ApiUrl,Status,TimeOut)SELECTnewid(),Business_Type+'-'+Table_Name,SUBSTRING(Business_Type,1,4),'0 0/1 * * * ?','post','http://localhost:9991/api/Sys_PostDataLog/SendNqiData?tableName='+Table_Encoding,'1','180'FROMBase_Advice_PrefixCodesql–NOT EXISTS一般用于自查notexists(select1fromBase_ProductwhereBase_Product.ProductCode=v_RD_PRODUCT_INFO.PRODUCT_CODE)NOT EXISTS是 SQL 中的一个条件表达式,主要用于在子查询中执行一个谓词测试,以判断是否存在满足特定条件的行。它常常用于在主查询中排除与子查询结果相关的记录。在 SQL 查询中,NOT EXISTS结构的一般语法是这样的:SELECT...FROMtable1WHERENOTEXISTS(SELECT1FROMtable2WHEREcondition)主查询(外部查询):table1中的记录是我们关注的目标集合。子查询(内部查询):table2和其中的condition定义了一个子集,用于检查是否存在符合条件的行。select 1的意思是选取一个常量值1,这里并不是指具体的某个列,而是用来构造一个布尔表达式。NOT EXISTS的工作原理是,对于主查询中的每一行,它都会去检查子查询是否存在满足condition的记录。如果有哪怕一行满足条件,EXISTS就会返回TRUE,反之则返回FALSE。加上NOT后,如果子查询没有找到匹配的记录,则NOT EXISTS返回TRUE,主查询中对应的那行记录就会被保留下来。举个例子:SELECT*FROMOrders oWHERENOTEXISTS(SELECT1FROMOrderDetails odWHEREod.OrderID=o.OrderIDANDod.ProductID=100)这个查询会返回所有在Orders表中但不在OrderDetails表中有产品ID为100的相关订单记录。总结一下,NOT EXISTS关键字主要用于从主查询结果集中过滤掉那些在相关子查询中能找到匹配记录的行。sql-----case-when-else-end条件case关联同时显示列也要有case..endSELECTCASEWHENRIGHT(PLAN_CODE,CHARINDEX('-',REVERSE(PLAN_CODE))-1)='001'THEN'PCB板工序'WHENRIGHT(PLAN_CODE,CHARINDE

更多文章