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,那么谁有答案?
发布于 2018-04-10 08:38:49
INSERT
语句的表值构造函数中的第一个列值具有混合数据类型。一些是整数,例如6
,还有一些是字符串,例如'6-1'
。根据data type precedence的规则,它们都被转换为int
。
如果您更改这些值,使第一列的值都是字符串,例如'6'
,则不会有问题。
下面的代码片段演示了该功能:
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的说明,请参阅文档。
发布于 2018-04-10 08:41:37
好奇心让我不知所措,你认为破折号会转换成什么样的int (不带十进制值的数字)值。3-1=2? 31?您是希望在插入值之前做数学运算,还是需要负号/破折号?
如果您不需要减号(正如Mitch如上所述),并且该列旨在保存整数值,那么应该有某种类型的数据输入筛选器来强制所有输入的值都是整数,并且应该将列定义为int。否则,您只会为将来的错误做好准备。
https://stackoverflow.com/questions/49743204
复制相似问题