【问题标题】:Understanding user-defined data types in SQL了解 SQL 中的用户定义数据类型
【发布时间】:2012-03-06 10:54:57
【问题描述】:

我正在尝试了解 Microsoft 的 PUBS 数据库示例的体系结构 在那里,我正在查看au_id Column,它具有用户定义的数据类型 id:varchar(11)

所以,如果我理解清楚的话,varchar(11) 表示它允许在单元格中输入 11 个字符。但是如果我输入

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

为什么会这样?他们是否有某种方法来验证此条目。我只能在User-Defined Data Type Folder 中找到一个名为id 的用户定义数据类型

提前谢谢你。

【问题讨论】:

  • 我不明白你在问什么.....你在寻找beginner's tutorial on ADO.NET - 还是什么??
  • 你真的要在每一行存储 2 个破折号吗?我建议您改用数据类型整数并删除破折号。
  • 什么错误? 通常,错误消息包含有用的信息来指导您找到原因或解决方案。

标签: sql sql-server sqldatatypes


【解决方案1】:

好的,刚刚找到创建 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 获得更好的警告/错误,而不是使用未对齐的连接进行的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多