我收到了一个错误:
Msg 8152,Level 16,State 4,Line 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');
这是我的表:
答案 0 :(得分:2)
有几点意见:
可能导致你问题的是SSN(带破折号)是11个字符,而不是10个。我想你已经想到了这一点,只是在这里陈述完整性'起见
考虑长度正确性,为什么SSN类型为nvarchar(11)?它的长度始终完全相同,仅由数字和短划线组成。更好的类型是char(11)(即ascii,固定宽度)
First_Name和Last_Name是nvarchar(因为人们来自各地),但是Middle_I是char(1)。据推测,中间名称也可以包含异国情调;我建议将其移至nchar(1)。
虽然我承认这些天性别是一个棘手的问题(即我们有超过传统的M / F二进制分类),但我怀疑有人会为他们的性别指定∰
(尽管我确实支持其他生活方式)。弄清楚要支持的内容列表是什么,并选择适当的数据类型。
除非PID来自某个生成的外部系统,否则它应该是一个标识列(或使用序列生成)。无论哪种方式,都不要让你的应用程序产生价值。
答案 1 :(得分:-1)
@Levi Shields-位字段的值需要为1或0 ....您是否尝试使用1表示true / yes和0而不是false / no? 你可以试一试吗?