了解SQL中的用户定义数据类型

时间:2012-03-06 10:54:57

标签: sql sql-server sqldatatypes

我试图了解微软PUBS数据库样本的架构 在那里,我正在查看au_id列,其具有用户定义的数据类型 id:varchar(11)

因此,如果我清楚地理解,varchar(11)意味着它允许在单元格中输入11个字符。但是如果我进入

  • 11个字母数字字符,错误
  • 11个数字字符,给出错误
  • 但如果我输入美国电话号码格式的字符,即123-54-2345,可行
  • 同样,如果我以其他顺序输入破折号(连字符),即1234-5-4544,再次显示错误

为什么会这样?他们是否有一些方法来验证此条目。我只能在id

中找到名为User-Defined Data Type Folder的用户定义数据类型

提前谢谢。

1 个答案:

答案 0 :(得分:4)

好的,刚刚找到了将创建pubs数据库的脚本。

作者的au_id列定义为:

CREATE TABLE authors
(
   au_id          id
     CHECK (au_id like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]')
     CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED,
  /* More columns */

CHECK约束拒绝您的无效值,而不是与用户定义类型相关的任何内容。如果您检查错误消息,可能提及它是CHECK约束失败。

(顺便说一句 - 我以为这是SSN格式,而不是电话号码 - 有人确认吗?)


SQL Server中的用户定义类型(除了表类型)没有提供太多价值 - 他们真正做的就是将固定所有比例/精度/长度选项的内置类型的简写名称关联起来。

如果系统允许你设置严格的类型,那么它们非常有用 - 这样两个相同底层类型但具有不同类型名称的值不可比较/可分配 - 你'例如,d得到更好的警告/错误,而不是使用错误对齐的连接进行查询。