Sql server 字符串或二进制数据将被截断。-即使柱的长度增加了

Sql server 字符串或二进制数据将被截断。-即使柱的长度增加了,sql-server,Sql Server,我在SQL Server中遇到了一个问题,我需要将一个列放大,我认为我已经放大了,但是我无法将大于该列初始大小的数据放入其中 列[columnName]最初是VARCHAR50,我使用下面的命令将大小更改为VARCHAR100: 在表设计视图中,我可以看到大小现在是100 尽管如此,我仍然得到了错误 字符串或二进制数据将被截断 尝试拟合超出50字节初始空间的数据时 我错过了什么 谢谢。假设您的insert语句类似于: insert into dbo.tableName ( ...,

我在SQL Server中遇到了一个问题,我需要将一个列放大,我认为我已经放大了,但是我无法将大于该列初始大小的数据放入其中

列[columnName]最初是VARCHAR50,我使用下面的命令将大小更改为VARCHAR100:

在表设计视图中,我可以看到大小现在是100

尽管如此,我仍然得到了错误

字符串或二进制数据将被截断

尝试拟合超出50字节初始空间的数据时

我错过了什么


谢谢。

假设您的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