20260831172912
This commit is contained in:
1 parent
d6a56eb17f
commit
4d46ce6c53
61 files changed
+2086
-2979
No files matched your search
@@ -19,7 +19,7 @@ BEGIN TRANSACTION;
|
||||
CREATE TABLE dbo.s_log_login (
|
||||
b_id bigint NOT NULL,
|
||||
b_user_id bigint NULL,
|
||||
b_account varchar(50) NULL,
|
||||
b_account nvarchar(50) NULL,
|
||||
b_login_type varchar(20) NOT NULL, -- 登录类型:password/token/oidc/ldap
|
||||
b_login_result int NOT NULL CONSTRAINT DF_s_log_login_result DEFAULT (0),
|
||||
b_fail_reason nvarchar(200) NULL,
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
日志表账号列改为 nvarchar:s_log_login.b_account / s_log_technical.b_account 原为 varchar(50),
|
||||
中文账号写入会因代码页转换变为 '?'(b_user.b_account 本身是 nvarchar,账号支持中文,见
|
||||
100_initialize_fms_new.sql)。改为 nvarchar(50) 与用户表对齐。
|
||||
|
||||
可重复执行:仅在列存在且当前类型为 varchar 时才 ALTER。
|
||||
s_log_login.b_account 上有索引 IX_s_log_login_account,SQL Server 修改列类型前需先删除、改完重建。
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.s_log_login', N'U') IS NOT NULL
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM sys.columns c
|
||||
JOIN sys.types t ON t.user_type_id = c.user_type_id
|
||||
WHERE c.object_id = OBJECT_ID(N'dbo.s_log_login')
|
||||
AND c.name = N'b_account'
|
||||
AND t.name = N'varchar'
|
||||
)
|
||||
BEGIN
|
||||
IF OBJECT_ID(N'dbo.IX_s_log_login_account', N'INDEX') IS NOT NULL
|
||||
DROP INDEX IX_s_log_login_account ON dbo.s_log_login;
|
||||
|
||||
ALTER TABLE dbo.s_log_login ALTER COLUMN b_account nvarchar(50) NULL;
|
||||
|
||||
IF OBJECT_ID(N'dbo.IX_s_log_login_account', N'INDEX') IS NULL
|
||||
CREATE INDEX IX_s_log_login_account ON dbo.s_log_login (b_account, b_occurdatetime DESC);
|
||||
END
|
||||
|
||||
IF OBJECT_ID(N'dbo.s_log_technical', N'U') IS NOT NULL
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM sys.columns c
|
||||
JOIN sys.types t ON t.user_type_id = c.user_type_id
|
||||
WHERE c.object_id = OBJECT_ID(N'dbo.s_log_technical')
|
||||
AND c.name = N'b_account'
|
||||
AND t.name = N'varchar'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.s_log_technical ALTER COLUMN b_account nvarchar(50) NULL;
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
为 dbo.s_i18n 增加 b_module_id 列,使多语言数据可按模块级联删除/查询,
|
||||
解决「删除模块后 s_i18n 残留孤儿数据」的问题(前端按 b_key 前缀匹配清理易漏)。
|
||||
|
||||
与 006_add_i18n_module_id.sql 的区别:006 作用于旧表 dbo.b_i18n;
|
||||
本脚本作用于当前前端实际使用的 dbo.s_i18n。
|
||||
|
||||
本脚本可重复执行:
|
||||
- 列不存在时才添加,并建索引;
|
||||
- 对存量数据做一次基于键命名约定的回填(module./menu./field./power./group. 前缀,
|
||||
取第二段作为模块编码关联 s_module.b_code),已回填或无法匹配的行不受影响。
|
||||
- 通用文案键(common.* 等)不关联模块,b_module_id 保持 NULL。
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- 第 1 批:DDL(列与索引)
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'dbo.s_i18n') AND name = N'b_module_id'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.s_i18n
|
||||
ADD b_module_id bigint NULL;
|
||||
|
||||
CREATE INDEX IX_s_i18n_module_id ON dbo.s_i18n (b_module_id)
|
||||
INCLUDE (b_key, b_locale, b_value);
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
GO
|
||||
|
||||
-- 第 2 批:存量回填(依赖第 1 批列已存在,因此必须 GO 分隔)
|
||||
SET NOCOUNT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
-- 键形如 module.<code> / menu.<code> / field.<code>.<item> / power.<code>.<item>
|
||||
-- / group.<code>.<random>,模块编码恒为第二个以 "." 分隔的片段。
|
||||
UPDATE i
|
||||
SET b_module_id = m.b_id
|
||||
FROM dbo.s_i18n i
|
||||
CROSS APPLY (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN CHARINDEX(N'.', i.b_key) > 0 THEN
|
||||
SUBSTRING(
|
||||
i.b_key,
|
||||
CHARINDEX(N'.', i.b_key) + 1,
|
||||
CASE
|
||||
WHEN CHARINDEX(N'.', i.b_key, CHARINDEX(N'.', i.b_key) + 1) > 0
|
||||
THEN CHARINDEX(N'.', i.b_key, CHARINDEX(N'.', i.b_key) + 1)
|
||||
- CHARINDEX(N'.', i.b_key) - 1
|
||||
ELSE LEN(i.b_key) - CHARINDEX(N'.', i.b_key)
|
||||
END
|
||||
)
|
||||
ELSE NULL
|
||||
END AS code
|
||||
) c
|
||||
CROSS APPLY (
|
||||
SELECT TOP (1) sm.b_id
|
||||
FROM dbo.s_module sm
|
||||
WHERE sm.b_code = c.code
|
||||
) m
|
||||
WHERE i.b_module_id IS NULL
|
||||
AND (
|
||||
i.b_key LIKE N'module.%'
|
||||
OR i.b_key LIKE N'menu.%'
|
||||
OR i.b_key LIKE N'field.%'
|
||||
OR i.b_key LIKE N'power.%'
|
||||
OR i.b_key LIKE N'group.%'
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
@@ -416,7 +416,7 @@ BEGIN
|
||||
CREATE TABLE dbo.s_log_technical (
|
||||
b_id bigint NOT NULL, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_user_id bigint NULL,
|
||||
b_account varchar(50) NULL,
|
||||
b_account nvarchar(50) NULL,
|
||||
b_sourcetype varchar(20) NULL,
|
||||
b_loglevel varchar(16) NOT NULL,
|
||||
b_logcategory varchar(64) NULL,
|
||||
@@ -443,7 +443,7 @@ BEGIN
|
||||
CREATE TABLE dbo.s_log_login (
|
||||
b_id bigint NOT NULL, -- 雪花主键(应用层生成,全局唯一)
|
||||
b_user_id bigint NULL,
|
||||
b_account varchar(50) NULL,
|
||||
b_account nvarchar(50) NULL,
|
||||
b_login_type varchar(20) NOT NULL,
|
||||
b_login_result int NOT NULL CONSTRAINT DF_s_log_login_result DEFAULT (0),
|
||||
b_fail_reason nvarchar(200) NULL,
|
||||
|
||||
Reference in new issue
Block a user