SQL Server 存储过程中的此检查约束子句期间会拒绝哪些字符?

Sun*_*Sun -1 sql-server check-constraints

我尝试导入一条在 addr 字段中带有分号的记录。一旦我从导入文件中删除分号,以下错误就消失了:

发生数据库错误 SQLSATE = 23000
[Microsoft][ODBC SQL Server 驱动程序][SQL Server]
INSERT 语句与 CHECK 约束“addr_customer”冲突。冲突发生在数据库“db”、表“dbo.customer”、列“addr”中。

存储过程有这段话。我试图在LIKE子句中理解约束检查正在寻找哪些其他字符。显然分号是不允许的。'%[我是否阅读了和之间列出的每个字符']%都是不允许的字符(例如“ | ; % _ ' )的子句?

TABLE [dbo].[customer]  WITH 
CHECK ADD  CONSTRAINT 
[addr_customer] 
CHECK  ((NOT [addr] like '%[,"|;%_'']%'))
Run Code Online (Sandbox Code Playgroud)

Cha*_*ace 5

CHECK约束验证该值与模式匹配LIKE

该模式的评估如下

  • %以任意字符、多个字符或无字符开头
  • [,"|;%_'']括号内的任何实际字符(不包括括号),并且'由于转义而加倍。
  • %后跟任意、多个或无字符

因此本质上,该值不能包含任何字符,"|;%_'

它还允许NULL插入 s,假设没有约束NOT NULL