创建规则以限制sql server中表中的特殊字符

Mid*_*hew 6 sql sql-server sql-server-2008 sql-server-2008-r2

我想创建一个规则来限制要输入到列中的特殊字符.我尝试了以下内容.但它没有用.

CREATE RULE rule_spchar
AS
@make LIKE '%[^[^*|\":<>[]{}`\( );@&$]+$]%'
Run Code Online (Sandbox Code Playgroud)

我不知道我在这里做错了什么.任何帮助,将不胜感激.

M.A*_*Ali 10

您可以Check Constraint在此列上创建一个并且只允许NumbersAlphabets插入此列,请参见下文:

检查约束仅允许数字和字母表

ALTER TABLE Table_Name 
ADD CONSTRAINT ck_No_Special_Characters 
       CHECK (Column_Name NOT LIKE '%[^A-Z0-9]%') 
Run Code Online (Sandbox Code Playgroud)

检查约束仅允许数字

ALTER TABLE Table_Name 
ADD CONSTRAINT ck_Only_Numbers 
       CHECK (Column_Name NOT LIKE '%[^0-9]%') 
Run Code Online (Sandbox Code Playgroud)

检查约束仅允许字母表

ALTER TABLE Table_Name 
ADD CONSTRAINT ck_Only_Alphabets 
       CHECK (Column_Name NOT LIKE '%[^A-Z]%') 
Run Code Online (Sandbox Code Playgroud)

  • 您是否有理由使用 `NOT LIKE`,并结合 RegExp 中的否定(`^` 符号),而不是仅仅使用 `LIKE '[A-Z0-9]'` 或者可能是 `LIKE '^[A -Z0-9]$'` ? (2认同)
  • @sanderd17 `x LIKE '[AZ]'` 仅匹配*单个字符*(隐式地 `len(x) = 1` 必须为 true),并且禁止执行 `x LIKE '[AZ]' OR x LIKE ' [AZ][AZ]' 或 ...`。无法将正则表达式(如(哈!)“*”修饰符与“LIKE”一起使用)。LIKE 的模式产生非常有限,并且*不涉及正则表达式*,即使“^”也用于其他(正则表达式)上下文中。双否定查找“任何未经批准的字符”,然后仅在“如果没有(即没有未经批准的字符)”时才认为输入有效。 (2认同)