Sql server 无法创建大于允许的最大行大小8060的大小为8081的行
我检查了stackoverflow(I)和其他链接的每个链接,但没有运气 我必须分析一个应用程序。所以我通过特定路径上的应用程序实用程序获得了备份文件。我在Sql server 无法创建大于允许的最大行大小8060的大小为8081的行,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我检查了stackoverflow(I)和其他链接的每个链接,但没有运气 我必须分析一个应用程序。所以我通过特定路径上的应用程序实用程序获得了备份文件。我在Sqlserver 2014完整版中正确还原了备份文件。然后我将应用程序的配置文件更改为这个sqlserver 之后,当运行应用程序并通过应用程序提交员工表单时,其会给出上述错误 Employee表数据库结构如下,它包含47列,没有任何行(这是第一个条目) 和insert语句(也有47个值),其错误也显示在应用程序中,如下所示: INSERT
Sqlserver 2014完整版中正确还原了备份文件。然后我将应用程序的配置文件更改为这个sqlserver
之后,当运行应用程序并通过应用程序提交员工表单时,其会给出上述错误
Employee表数据库结构如下,它包含47列,没有任何行(这是第一个条目)
和insert语句(也有47个值),其错误也显示在应用程序中,如下所示:
INSERT INTO employee
(
wcsuid,lastupdatedate,updatedatetime,locationid,isactive,CreatedDate,sdate,identityemployeeno,employeeid,firstname,lastname,ssn,dob,gender,address,addressLine2,city,state,zipcode,isinternationaladdress,telephone,cellphone,IdentityJobTitleNo,manager,hiredate,terminationdate,username,
userpassword,userpassword_required,employeestanding,identityroleid,loggedin,punchedin,punchedinTime,punchedinDate,contactname,contactaddress,contactaddressLine2,contactcity,contactstate,contactzipcode,isinternationalcontactaddress,contactphone,contactcellphone,relationtoemployee,worksoncommission,overrideitemcommission)
VALUES
(
'2015121512201580210002','','20151215122015802','','','20151215','','4','','Ajayendra','Raghuvanshi','','19782707','M','','','','','','','0792762063','','','','00000000','00000000','ajayendra',
'SdYHcqaxf1gMjjSkjmpUiw==','N','','','','','','','','','','','','','','','','','N','N')
是字符字段的限制,但我用值检查了所有长度,没有得到错误背后的任何逻辑
所以问题是如何解决错误以及它为什么会出现?我不是SQL Server专家,但。。。加上上面所有的字段长度,我得到了4046
(我可能犯了一些错误-现在还太早,我还在喝第一杯咖啡……)。现在来看:
nchar[(n)]
固定长度的Unicode字符串数据。n定义字符串长度,必须是1到4000之间的值。存储大小是n字节的两倍。当排序规则代码页使用双字节字符时,存储大小仍为n字节。根据字符串的不同,n字节的存储大小可以小于为n指定的值。nchar的ISO同义词是national char和national char
请注意,存储每个字符需要两个字节。做2*4046
我们有8092
字节行长度!还要注意,nchar
是固定长度,我假设在创建条目/行时分配该长度,因此它会生成您看到的错误,告诉您该行太长。我希望它至少在您创建表时警告您
解决
规范化更多:将表格一分为二,例如,如果您以后需要每个员工的家庭和工作地址,可以使用employeeaddress
表格
使用可变或动态长度的nvarchar
。存储仍然是每个字符2字节,但仅用于插入的数据(未预先分配)。如果尝试将所有字段填充到其最大长度,则会达到相同的限制
我不是SQL Server专家,但。。。加上上面所有的字段长度,我得到了4046
(我可能犯了一些错误-现在还太早,我还在喝第一杯咖啡……)。现在来看:
nchar[(n)]
固定长度的Unicode字符串数据。n定义字符串长度,必须是1到4000之间的值。存储大小是n字节的两倍。当排序规则代码页使用双字节字符时,存储大小仍为n字节。根据字符串的不同,n字节的存储大小可以小于为n指定的值。nchar的ISO同义词是national char和national char
请注意,存储每个字符需要两个字节。做2*4046
我们有8092
字节行长度!还要注意,nchar
是固定长度,我假设在创建条目/行时分配该长度,因此它会生成您看到的错误,告诉您该行太长。我希望它至少在您创建表时警告您
解决
规范化更多:将表格一分为二,例如,如果您以后需要每个员工的家庭和工作地址,可以使用employeeaddress
表格
使用可变或动态长度的nvarchar
。存储仍然是每个字符2字节,但仅用于插入的数据(未预先分配)。如果尝试将所有字段填充到其最大长度,则会达到相同的限制
对于nchar值,每个字符使用了两个字节,因此您应该将字符数乘以2以获得总行大小。对于nchar值,每个字符使用了两个字节,因此您应该将字符数乘以2以获得总行大小。最后我得到了解决方案。我在分析阶段,所以我不能在规范化表中更改
在阅读了下面的链接后,我理解了这个问题。所以我只是用nvarchar
数据类型重新创建了一个“Employee”表,因为我只有一个选项
感谢@urban给出正确的方向,因此我接受他的回答
我终于找到了解决办法。我在分析阶段,所以我不能在规范化表中更改
在阅读了下面的链接后,我理解了这个问题。所以我只是用nvarchar
数据类型重新创建了一个“Employee”表,因为我只有一个选项
感谢@urban给出正确的方向,因此我接受他的回答
我不是SQL Server专家,但您是否可以规范化您的架构并将一些列移出上表?这将增加可供您使用的最大行数。其中许多字段的大小似乎太大(例如,ssn为99个字符)或类型错误(日期和时间)。我不是SQL Server专家,但您是否可以规范化架构并将一些列移出上表?这将增加可供您使用的最大行数。其中许多字段的大小似乎太大(例如,ssn为99个字符)或类型错误(日期和时间)。谢谢,亲爱的,但正如我所说,这是要分析的应用程序数据库,我在这一阶段不会规范化或添加/更改数据库结构。我会检查你的解决方案。错过了那部分。。。咖啡相关问题:)nvarchar的运气如何?谢谢,亲爱的,但正如我所说的,这是应用程序数据库
INSERT INTO employee
(
wcsuid,lastupdatedate,updatedatetime,locationid,isactive,CreatedDate,sdate,identityemployeeno,employeeid,firstname,lastname,ssn,dob,gender,address,addressLine2,city,state,zipcode,isinternationaladdress,telephone,cellphone,IdentityJobTitleNo,manager,hiredate,terminationdate,username,
userpassword,userpassword_required,employeestanding,identityroleid,loggedin,punchedin,punchedinTime,punchedinDate,contactname,contactaddress,contactaddressLine2,contactcity,contactstate,contactzipcode,isinternationalcontactaddress,contactphone,contactcellphone,relationtoemployee,worksoncommission,overrideitemcommission)
VALUES
(
'2015121512201580210002','','20151215122015802','','','20151215','','4','','Ajayendra','Raghuvanshi','','19782707','M','','','','','','','0792762063','','','','00000000','00000000','ajayendra',
'SdYHcqaxf1gMjjSkjmpUiw==','N','','','','','','','','','','','','','','','','','N','N')