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


一、sql记录

触发器参照编写

CREATE TRIGGER trgAfterInsert_UpdateUDFs
ON YourTargetTable
AFTER INSERT
AS
BEGIN
    -- 禁用触发器的行为以避免递归触发
    SET NOCOUNT ON;

    -- 更新目标表中的 UDF004 和 UDF005 字段
    UPDATE t
    SET 
        UDF004 = b.ProductName,
        UDF005 = b.ProductStandard
    FROM YourTargetTable t
    INNER JOIN inserted i ON t.ID = i.ID
    INNER JOIN Base_Product b ON i.MatCode = b.ProductCode
    WHERE i.REGRULE = 'MatRegSN';
END;

创建聚集索引(NCLUSTERED用于分组排序)或非聚集索引(NONCLUSTERED)

CREATE NONCLUSTERED INDEX IX_FIT_METER_INFO_SERIAL_NO_DESC
ON FIT_METER_INFO (SERIAL_NO DESC) 

两表中相同的项目名称来更新 Table1 中的项目编号

UPDATE Table1
SET Table1.ProjectNumber = Table2.NewProjectNumber
FROM Table1
INNER JOIN Table2 ON Table1.ProjectName = Table2.ProjectName;

标识列不能插入显示值

在这里插入图片描述

-- 将IDENTITY_INSERT设置为ON
SET IDENTITY_INSERT Sys_Role ON
INSERT INTO Sys_Role (id, column2, column3) 
VALUES (123, 'value2', 'value3')
SET IDENTITY_INSERT Sys_Role OFF
-- 插入完成后,记得将IDENTITY_INSERT设置回OFF

sqlserver表添加列和注释

ALTER TABLE [dbo].[要添加的表名] ADD [ModifyDate] 数据类型  NULL
GO

EXEC sp_addextendedproperty
'MS_Description', N'要添加的注释',
'SCHEMA', N'dbo',
'TABLE', N'要添加的表名',
'COLUMN', N'ModifyDate'

Sqlserver/唯一查询Distinct失效

WITH temp AS (
    SELECT
        '01' AS vouchertype,
        td.DOC_NO AS cordercode,
        t.UDF001 AS cwhcode,
        t.CreateDate AS ddate,
        t.ID AS ccode,
        t.SUPPLIER_CODE AS cvencode,
        0 AS states,
        t.CreateDate,
        t.DOC_NO AS mes_code,
        ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY t.CreateDate) AS rn
    FROM
        T_ToERP_Main t
    INNER JOIN T_ToERP_MBody td ON t.Id = td.ID
    WHERE XTYPE = 'purchase' AND AuditState = 'N' AND CreateDate > '2024-12-08 15:06:00'
)
SELECT * FROM temp WHERE rn = 1;--保留排序出的第一条记录

Sqlserver/Mysql用表标识列删除重复项

  • Mysql用表标识列删除重复项
  • 想基于某列(或几列)的值来决定保留哪一行(比如总是保留ID最小的那一行)
DELETE t1 FROM your_table t1
JOIN (
    SELECT MIN(id) as min_id, column_with_duplicates
    FROM your_table
    GROUP BY column_with_duplicates
    HAVING COUNT(*) > 1
) t2 ON t1.column_with_duplicates = t2.column_with_duplicates AND t1.id <> t2.min_id;
  • sqlserver用表标识列删除重复项
  • 对于支持窗口函数的数据库系统(如SQL Server、PostgreSQL、Oracle等)
  • 可以使用 ROW_NUMBER() 分配每个重复记录的行号,然后删除行号大于1的记录。
WITH CTE AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY column_with_duplicates ORDER BY id) as rn
    FROM your_table
)
SELECT * FROM CTE WHERE rn > 1; -- 查询要删除的
DELETE FROM CTE WHERE rn > 1;--保留第一个

case条件逻辑控制结构

  • 常用于翻译字段不同的结果
CASE case_value
	WHEN when_value THEN statement_list
	ELSE statement_list
END as 别名

sql常用函数记录

-- 当天时间范围条件
CONVERT(DATE, GETDATE()) 
AND DATEADD(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转换成字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值