admin 发表于 3 天前

SQL修改角色名字限制

建立新的限制表

CREATE TABLE illegal_character_names (partial_name varchar(30))建立新的函数
<span style="color: rgb(28, 31, 35); font-family: Inter, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;SF Pro SC&quot;, &quot;SF Pro Display&quot;, &quot;SF Pro Icons&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: medium; white-space: pre; background-color: rgb(255, 255, 255);">CREATE FUNCTION dbo.check_valid_character_name (
    @character_name NVARCHAR(40)
)
RETURNS TINYINT
AS
BEGIN
    DECLARE @result TINYINT = 0;
    DECLARE @char NVARCHAR(1);
    DECLARE @i INT = 1;
   
    -- 遍历每个字符,检查是否合法
    WHILE @i <= LEN(@character_name)
    BEGIN
      SET @char = SUBSTRING(@character_name, @i, 1);
      
      -- 检查是否为中文、英文、数字或允许的特殊符号
      IF NOT (
            -- 中文字符范围 (基本多文种平面)
            UNICODE(@char) BETWEEN 0x4E00 AND 0x9FFF OR
            -- 英文字母和数字
            @char LIKE '' OR
            -- 允许的特殊符号
            @char LIKE ''
      )
      BEGIN
            SET @result = 1;
            BREAK;
      END
      
      SET @i = @i + 1;
    END;
   
    -- 检查是否在非法名称列表中
    IF EXISTS (
      SELECT 1
      FROM dbo.illegal_character_names
      WHERE @character_name LIKE '%' + partial_name + '%'
    )
      SET @result = 1;
   
    RETURN @result;
END</span>
插入屏蔽的字符
-- 插入非法名称列表(明确列名并使用N前缀)
INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%****%');
INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%nigg%');
INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%wank%');
INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%whore%');

-- 示例:查询包含敏感词的角色名
SELECT *
FROM dbo.characters
WHERE EXISTS (
    SELECT 1
    FROM dbo.illegal_character_names
    WHERE characters.name LIKE N'%' + illegal_character_names.partial_name + N'%'
);修改储存过程SP_CHAR_CREATE 里面数据
原始为:
EXEC sp_char_name_check @character_name, @v_ret OUTPUT

IF @v_ret < 0
BEGIN
SET @sp_rtn = @v_ret
RETURN
END修改为:
IF (dbo.NameBlock(@character_name) = 1)
BEGIN
SET @sp_rtn = -12
RETURN
END



页: [1]
查看完整版本: SQL修改角色名字限制