Sql server 字符串或二进制数据将被截断。-即使柱的长度增加了
我在SQL Server中遇到了一个问题,我需要将一个列放大,我认为我已经放大了,但是我无法将大于该列初始大小的数据放入其中 列[columnName]最初是VARCHAR50,我使用下面的命令将大小更改为VARCHAR100: 在表设计视图中,我可以看到大小现在是100 尽管如此,我仍然得到了错误 字符串或二进制数据将被截断 尝试拟合超出50字节初始空间的数据时 我错过了什么Sql server 字符串或二进制数据将被截断。-即使柱的长度增加了,sql-server,Sql Server,我在SQL Server中遇到了一个问题,我需要将一个列放大,我认为我已经放大了,但是我无法将大于该列初始大小的数据放入其中 列[columnName]最初是VARCHAR50,我使用下面的命令将大小更改为VARCHAR100: 在表设计视图中,我可以看到大小现在是100 尽管如此,我仍然得到了错误 字符串或二进制数据将被截断 尝试拟合超出50字节初始空间的数据时 我错过了什么 谢谢。假设您的insert语句类似于: insert into dbo.tableName ( ...,
谢谢。假设您的insert语句类似于:
insert into dbo.tableName (
...,
columnName,
...
)
select ...,
columnName,
...
from dbo.anotherTableName
然后,使用此SQL找出要插入到该列中的最大值:
select max(len(columnName)) as minVarcharLengthRequired
from dbo.anotherTableName
然后对alter table语句使用大于该值的值。也许数据长度超过100个字符?那么在某个地方仍然有一个VARCHAR50。存储过程参数?带触发器的视图?参数化命令?此外,请检查不处理您认为正在处理的服务器/表的常见愚蠢错误。。。select命令,运行select可以很简单地查看问题所在。。。改为进入tmp,查看生成表的列类型。@Jeroenmoster,谢谢你的评论,它帮助理解了问题。事实证明,错误消息的一部分提到了一个过程,我在提出这个问题时并不认为这很重要。这个过程实际上是一个加密的触发器。我想如果我有一个触发器来检查更新并且仍然限制为原始大小,那么更改列大小是徒劳的。
select max(len(columnName)) as minVarcharLengthRequired
from dbo.anotherTableName