首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将varchar值'3-1‘转换为数据类型int时转换失败

将varchar值'3-1‘转换为数据类型int时转换失败
EN

Stack Overflow用户
提问于 2018-04-10 07:40:05
回答 2查看 243关注 0票数 0
代码语言:javascript
运行
复制
    USE Zoo

    CREATE TABLE dbo.TypeDetail
    (
        ID int IDENTITY(1,1) NOT NULL,
        AnimalID nvarchar(6) NOT NULL,
        TypeID int NOT NULL
    )

    INSERT INTO dbo.TypeDetail (AnimalID, TypeID)
    VALUES
    (1, 5),
    (1, 8),
    (2, 5),
    (2, 8),
    (3, 5),
    (3, 8),
    ('3-1', 5),
    ('3-1', 8),
    (4, 6),
    (5, 6),
    (6, 6),
    (6, 3),
    ('6-1', 6),
    ('6-1', 15),
    ('6-2', 6),
    ('6-2', 3)

我正在尝试使用它将值'3-1‘插入到这个表中,但是我总是得到一个错误,说它正在尝试将该值转换为int。我需要它作为varchar,那么谁有答案?

EN

回答 2

Stack Overflow用户

发布于 2018-04-10 08:38:49

INSERT语句的表值构造函数中的第一个列值具有混合数据类型。一些是整数,例如6,还有一些是字符串,例如'6-1'。根据data type precedence的规则,它们都被转换为int

如果您更改这些值,使第一列的值都是字符串,例如'6',则不会有问题。

下面的代码片段演示了该功能:

代码语言:javascript
运行
复制
select Val, SQL_Variant_Property( Val, 'BaseType' ) as BaseType
  from ( values ( '1' ), ( 2 ) ) as PH( Val );

尝试更改值的类型,例如'2'或add 3.14,看看会发生什么。

有关table value constructor data types的说明,请参阅文档。

票数 2
EN

Stack Overflow用户

发布于 2018-04-10 08:41:37

好奇心让我不知所措,你认为破折号会转换成什么样的int (不带十进制值的数字)值。3-1=2? 31?您是希望在插入值之前做数学运算,还是需要负号/破折号?

如果您不需要减号(正如Mitch如上所述),并且该列旨在保存整数值,那么应该有某种类型的数据输入筛选器来强制所有输入的值都是整数,并且应该将列定义为int。否则,您只会为将来的错误做好准备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49743204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档