我正在使用现有的SQL Server 2000数据库,该数据库包含一个字段“Rev1”。该字段最初设计为varchar(2)。最近,我们已经转移到新的ERP系统,并且要遵守它们需要存储5个可用字符。简单的问题,所以我进入了表的设计,并增加了大小。我发现了以下错误:
String or binary data would be truncated. The statement has been terminated
奇怪,我想可能是信息被意外编码,导致长度超过列限制。所以我显着增加了值,并尝试将字段更改为nvarchar。所有更改似乎都会继续在更新和插入时使用超过两个字符的值引发相同的错误。我不会以我期望的方式增加列宽,或者它是否有可能无声地失败并导致这些意外结果?
简化创建:
CREATE TABLE [dbo].[Drawings](
[ID] [int] IDENTITY(1,1) NOT NULL,
[...]
[Rev1] [nvarchar](50) NULL,
[...]
CONSTRAINT [PK_Drawings] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
以下查询:
UPDATE Drawings SET Rev1 = '12345' WHERE ID = 12345
将失败并显示错误消息以及新插入内容。但是,如果我保持在原始列的两个字符的宽度内,则查询将成功。我能做些什么来确保柱尺寸确实像我期望的那样增长?
答案 0 :(得分:1)
听起来可能有一个触发器也在对这些数据做些什么。检查表上是否有可能从该列获取数据并在其他位置更新/插入的触发器。如果是这样,触发器正在操作的列也需要使用新数据类型进行更新。