【问题标题】:Msg 8152, Level 16, State 14, Line 1 String or binary data would be truncatedMsg 8152, Level 16, State 14, Line 1 字符串或二进制数据将被截断
【发布时间】:2019-10-02 13:27:05
【问题描述】:

我在现有表中添加了一个新列 (varchar),并希望在该列的每一行中用“P/R”替换空值。

这可以很容易地在 Access 数据库上作为“P/R”AS [column] 完成,但我在 SQL 上找不到等价物。

我尝试了下面的代码并收到了一个对我来说没有意义的错误。有人可以解释原因并提供解决方案吗?

非常感谢,

Alter table [EPG 00) Premium] add [Earning] varchar

Update [EPG 00) Premium] 
set [earning] = 'P/R'
where [earning] is null

消息 8152,第 16 级,状态 14,第 1 行
字符串或二进制数据将被截断。
声明已终止。

【问题讨论】:

  • 这就是为什么您应该始终声明您的长度、比例和精度。在这种情况下Alter table [EPG 00) Premium] add [Earning] nvarchar = Alter table [EPG 00) Premium] add [Earning] nvarchar(1)'P/R' 有 3 个字符长,因此对于您的新列来说太大了(2 个字符)。
  • 应该是varchar(size),其中size是最大字符数。
  • 另外,您真的有一张名为EPG 00) Premium 的表格吗?您确实应该避免使用任何会导致您需要分隔符来标识对象的名称,尤其是括号等特殊字符 (())。
  • 嗨拉努,感谢您的帮助!我正在从 Access 数据库传输表和查询,包括奇怪的表名,但会采纳您的建议! :)

标签: sql sql-server sql-server-2012


【解决方案1】:

varchar 默认长度为 1 可能是你的错误

Alter table [EPG 00) Premium] add [Earning] varchar(10)

Update [EPG 00) Premium] 
set [earning] = 'P/R'
where [earning] is null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多