【问题标题】:(SQL Server 2017) I get error Msg 8152 and I don't know why(SQL Server 2017)我收到错误消息 8152,我不知道为什么
【发布时间】:2020-01-25 07:09:11
【问题描述】:

我不知道为什么,但在尝试插入类似的内容后,我收到了错误消息 8152(在 SQL Server 2017 中)

INSERT INTO Users (usr_name, usr_pwd, usr_thing1, usr_thing2)
VALUES ('ticko', 'kgrhjwekr3h4', 1, '34798563');

进入餐桌

CREATE TABLE Users
(
    usr_id INTEGER NOT NULL PRIMARY KEY IDENTITY(0, 1),
    usr_name VARCHAR NOT NULL,
    usr_pwd VARCHAR NOT NULL,
    usr_thing1 INT NOT NULL,
    usr_thing2 VARCHAR NOT NULL,
    usr_group INT,
    usr_status VARCHAR DEFAULT 'ACTIVE',
    usr_created DATE DEFAULT CURRENT_TIMESTAMP,

    FOREIGN KEY (usr_group)
        REFERENCES Groups(grp_reqid)
);

我得到的输出是

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

提前感谢您的帮助!

【问题讨论】:

  • 您意识到您所有的varchar 列都有length of 1
  • Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何varchar 变量和参数提供一个长度。由于您没有指定任何长度,因此您的VARCHAR正好是一个字符 - 所以您尝试插入的字符串太长 因此发生此错误...

标签: sql sql-server tsql sql-server-2017


【解决方案1】:

您需要为VARCHAR 列定义长度

例如

CREATE TABLE Users(
    usr_id INTEGER NOT NULL PRIMARY KEY IDENTITY(0, 1),
    usr_name VARCHAR(100) NOT NULL,
    usr_pwd VARCHAR(100) NOT NULL,
    usr_thing1 INT NOT NULL,
    usr_thing2 VARCHAR(100) NOT NULL,
    usr_group INT,
    usr_status VARCHAR(100) DEFAULT 'ACTIVE',
    usr_created DATE DEFAULT CURRENT_TIMESTAMP,

    FOREIGN KEY (usr_group)
        REFERENCES Groups(grp_reqid)
);

【讨论】:

  • 。 .您不需要定义长度(尽管这是最佳实践)。显然,SQL Server 接受没有指定长度的表定义。问题是默认长度因上下文而异,在此上下文中为“1”,它不够大。我希望 SQL Server 需要长度,但它不需要。
  • 哇,谢谢。我可以发誓我已经尝试过这样做。好像没有,哈哈。
【解决方案2】:

这是因为您没有给出要在 varchar 和 int 中插入的长度。 首先将长度关联到它然后运行它,它不会显示任何错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2019-02-14
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多