【问题标题】:Msg 8152, Level 16, State 4, Line 1 String or binary data would be truncated These are not real People or SSN'sMsg 8152, Level 16, State 4, Line 1 字符串或二进制数据将被截断 这些不是真实的人或 SSN
【发布时间】:2017-05-04 02:32:50
【问题描述】:

我收到一个错误:

消息 8152,第 16 级,状态 4,第 1 行
字符串或二进制数据将被截断

我做错了什么?

INSERT INTO Person(PID, First_Name, Middle_I, Last_Name, Birth_Date, SSN, Gender, Student_Active, Staff_Active, Mod_date)
VALUES (1, 'Mohammad', 'A', 'Ratliff', '1957-06-04', '346-05-9842', 'M', 'Yes', 'No', '19563-06-04'),
       (2, 'Lidia', 'B', 'Knapp', '1955-08-13', '758-10-7115', 'F', 'Yes', 'No', '19542-07-02'),
       (3, 'Alexandre', 'C', 'Wright', '1989-01-06', '567-30-3117', 'M', 'Yes', 'No', '19564-02-1'),
       (4, 'Cortez ', 'D', 'Payne', '1983-10-08', '513-30-0449', 'M', 'No', 'No', '19532-06-04'),
       (5, 'Sherman', 'E', 'Yang', '1955-12-29', '246-97-0792', 'M', 'Yes', 'Yes', '19547-06-04'),
       (6, 'Remington', 'F', 'Montoya', '1989-01-22', '672-20-4607', 'M', 'Yes', 'No', '19554-02-05'),
       (7, 'Yessenia', 'G', 'Petty', '1967-12-03', '508-78-9337', 'F', 'Yes', 'No', '19547-01-01'),
       (8, 'Yvette', 'H', 'Mcgowan', '1979-10-29', '019-88-7329', 'F', 'No', 'No', '19123-04-09'),
       (9, 'Hugh', 'I', 'Cooke', '1950-03-12', '699-14-9893', 'M', 'Yes', 'No', '19563-06-04'),
       (10, 'Curtis', 'J', 'Mooney', '1979-09-17', '193-20-2358', 'M', 'No', 'No', '19551-02-07'),
       (11, 'Desiree', 'K', 'Ayers', '1981-10-16', '256-84-1903', 'F', 'Yes', 'Yes', '19533-07-08');

这是我的桌子:

【问题讨论】:

  • '19542-07-02' 在我看来不是一个有效的日期。
  • 您最好希望这些不是您发布的真实姓名和 SSN。
  • 他们是伪造的个人资料,只是为一个班级建立一个数据库
  • 抱歉应该把它放在标题里
  • SSN 是带有两个破折号的十一个字符。您的字段只允许十个字符。

标签: sql-server


【解决方案1】:

几个观察:

  1. 可能导致您出现问题的原因是 SSN(带破折号)是 11 个字符,而不是 10 个字符。我想您已经弄清楚了,只是为了完整起见在这里说明

  2. 考虑到长度正确性,为什么 SSN 是 nvarchar(11) 类型?它的长度始终完全相同,并且仅由数字和破折号组成。更好的类型是 char(11)(即只是 ascii,固定宽度)

  3. First_Name 和 Last_Name 是 nvarchar(合适的,因为人们来自世界各地),但 Middle_I 是 char(1)。据推测,中间名也可以包含异国情调的字符;我建议将其移至 nchar(1)。

  4. 1234563支持替代生活方式)。找出您想要支持的内容列表并选择合适的数据类型。
  5. 除非 PID 来自某个生成 is 的外部系统,否则它应该是一个标识列(或使用序列生成)。无论哪种方式,都不要让您的应用程序提出一个值。

【讨论】:

    【解决方案2】:

    @Levi Shields- 位字段的值需要为 1 或 0....您是否尝试使用 1 表示真/是和 0 而不是假/否? 你可以试一试吗?

    【讨论】:

    • 这是问题的一部分,我还不得不放下桌子并重新制作它。感谢大家的帮助它现在可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多