一、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转换成字符串
'JBWC' + CAST ( newid( ) AS VARCHAR ( 50 ) ) AS NOTICE_NO,
-- 截取字符段长度
SUBSTRING(截取的字段, 开始索引(从1开始), length)
-- replace替换字符串中的某一子串的
REPLACE(str, search_string, replacement_string)
sql备份表
在SQL中,如果你想从一个表(比如原表)创建一个内容完全一样的新表(比如原表_copy)
- 在SQL Server、PostgreSQL等数据库,可以使用
SELECT INTO语句。以下是具体的SQL命令:
SELECT * INTO dawd_copy FROM dawd;
- 在MySQL中则需要采用
CREATE TABLE AS SELECT的方式:
CREATE TABLE dawd_copy AS SELECT * FROM dawd;
sql批量插入数据
从Base_Advice_PrefixCode表里面查出字段然后批量插入到Sys_QuartzOptions这里面
INSERT INTO Sys_QuartzOptions(Id,TaskName,GroupName,CronExpression,Method,ApiUrl,Status,TimeOut)
SELECT newid(),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'
FROM Base_Advice_PrefixCode
sql–NOT EXISTS
- 一般用于自查
not exists(select 1 from Base_Product where Base_Product.ProductCode=v_RD_PRODUCT_INFO.PRODUCT_CODE)
NOT EXISTS 是 SQL 中的一个条件表达式,主要用于在子查询中执行一个谓词测试,以判断是否存在满足特定条件的行。它常常用于在主查询中排除与子查询结果相关的记录。
在 SQL 查询中,NOT EXISTS 结构的一般语法是这样的:
SELECT ...
FROM table1
WHERE NOT EXISTS (
SELECT 1
FROM table2
WHERE condition
)
- 主查询(外部查询):
table1中的记录是我们关注的目标集合。 - 子查询(内部查询):
table2和其中的condition定义了一个子集,用于检查是否存在符合条件的行。
select 1的意思是选取一个常量值1,这里并不是指具体的某个列,而是用来构造一个布尔表达式。
NOT EXISTS的工作原理是,对于主查询中的每一行,它都会去检查子查询是否存在满足condition的记录。如果有哪怕一行满足条件,EXISTS就会返回TRUE,反之则返回FALSE。加上NOT后,如果子查询没有找到匹配的记录,则NOT EXISTS返回TRUE,主查询中对应的那行记录就会被保留下来。
举个例子:
SELECT *
FROM Orders o
WHERE NOT EXISTS (
SELECT 1
FROM OrderDetails od
WHERE od.OrderID = o.OrderID AND od.ProductID = 100
)
这个查询会返回所有在 Orders 表中但不在 OrderDetails 表中有产品ID为100的相关订单记录。
总结一下,NOT EXISTS 关键字主要用于从主查询结果集中过滤掉那些在相关子查询中能找到匹配记录的行。
sql-----case-when-else-end
条件case关联同时显示列也要有case..end
SELECT
CASE
WHEN RIGHT(PLAN_CODE, CHARINDEX('-', REVERSE(PLAN_CODE)) - 1) = '001' THEN 'PCB板工序'
WHEN RIGHT(PLAN_CODE, CHARINDEX('-', REVERSE(PLAN_CODE)) - 1) =


3657

被折叠的 条评论
为什么被折叠?



