当我为特定表运行update / insert语句时,我返回以下错误:
* ERROR 8152 * (rc -1):SQLSTATE = 22001 Microsoft SQL Server Native Client 10.0 字符串或二进制数据将被截断。
我手动浏览了表格我试图更新以查看是否有任何值大于该列允许的最大varchar,并且无法使用以下脚本找到任何值:
select max(len(COLUMN_NAME)) from TABLE_NAME
有没有办法在db中查询所有列中超出其列的最大允许字符数的值?
答案 0 :(得分:1)
有没有办法在数据库中查询所有列中超出其列的最大允许字符数的值?
正如其他评论所指出的那样,问题不在于目标表中的数据,而在于您尝试插入/更新的数据。
但是,如果要插入/更新从其他表中选择的数据,这些查询可能对您有用。大多数情况下,写作都很有趣。
替换#MAX_LENGTH#
占位符和两个#TABLE_NAME#
占位符,这将为您提供表格中的任何违规值。
declare @dyn varchar(max)
select @dyn = 'select null as [Column], null as [Value], null as [Lenght] '
select @dyn = @dyn
+ 'union select ''' + name + ''', cast(' + name + ' as varchar(max)), len(' + name + ')
from #TABLE_NAME#
where len(' + name + ') > #MAX_LENGTH#'
from sys.columns c
where c.object_id = object_id('#TABLE_NAME#')
exec(@dyn)
替换两个#TABLE_NAME#
占位符,这会显示表格每列中最大值的长度。
declare @dyn varchar(max)
set @dyn = 'select 0 x'
select @dyn = @dyn + ', max(len(' + name + ')) as [' + name + ']'
from sys.columns c
where c.object_id = object_id('#TABLE_NAME#')
exec(@dyn + 'from #TABLE_NAME#')
答案 1 :(得分:0)