sql-server - 具有正确类型和长度的疯狂“字符串或二进制数据将被截断”错误
问题描述
我有一个具有以下表结构的表;
CREATE TABLE [dbo].[SALES](
[COLUMN1] [numeric](18, 0) NOT NULL,
[COLUMN2] [varchar](11) NOT NULL,
[COLUMN3] [numeric](18, 0) NULL,
[COLUMN4] [numeric](18, 0) NULL,
[COLUMN5] [datetime] NULL,
[COLUMN6] [datetime] NULL,
[COLUMN7] [numeric](18, 0) NULL,
[COLUMN8] [numeric](18, 0) NULL,
[COLUMN9] [smallint] NULL,
[COLUMN10] [smallint] NULL,
[COLUMN11] [datetime] NULL,
[COLUMN12] [varchar](30) NULL,
[COLUMN13] [smallint] NULL,
[COLUMN14] [varchar](20) NULL CONSTRAINT [DF__SALES_DATA__3F3D11FA] DEFAULT (null),
[COLUMN15] [smallint] NOT NULL CONSTRAINT [DF_SALES_anonymous] DEFAULT ((0)),
[COLUMN16] [numeric](18, 0) NULL,
[COLUMN17] [varchar](11) NULL,
[COLUMN18] [smallint] NULL,
[COLUMN19] [varchar](100) NULL,
[COLUMN20] [datetime] NULL,
CONSTRAINT [XPKSALES] PRIMARY KEY CLUSTERED
(
[COLUMN1] 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]
但是,当我将 11 个字符的值更新到 COLUMN17 中(请注意,列长度为 11)时,SQL Server 会引发以下错误。我正在使用 SQL Server 2014。
字符串或二进制数据将被截断。
但是,我创建了一个表,其中一列的长度为 11 个字符,插入的值包含 11 个字符。它被成功插入,然后更新相同的值。更新太成功了。
有人可以帮我确定问题吗?
更新
出于某种原因,解决它的唯一方法是铸造价值
UPDATE SALES SET Column17 = CAST( '89000107051' AS VARCHAR(11))
有人可以解释为什么需要对具有适当长度的普通 varchar 值执行此操作吗?
注意:触发器不是答案
解决方案
推荐阅读
- javascript - 如何禁用 chrome 应用程序上下文菜单
- python - 反序列化 Avro 消息
- python - sendgrid 中的附件已保存但为空
- listview - 如何创建搜索栏和列表(使用 FireStore 中的 StreamBuilder 和 Listview 创建)一起滚动?
- asp.net-mvc - 如何在我的控制器 (SignalR) 上调用集线器?
- javascript - 如何使用 koa-multer 获取图像路径?
- bash - 长到宽格式
- java - 使用 Keycloak 保护 Spring Cloud Gateway
- react-native - createNavigatorFactory 不是函数
- javascript - setstate 模式以访问状态中的对象的属性(reactjs)