Sql server 在SQL中插入多个值,转换失败
我有一个SQL表:Sql server 在SQL中插入多个值,转换失败,sql-server,insert,Sql Server,Insert,我有一个SQL表: CREATE TABLE [jato].[option_list]( [vehicle_id] [bigint] NOT NULL, [option_id] [int] NOT NULL, [option_type] [varchar](10) NULL, [option_code] [varchar](255) NULL, [manuf_name] [nvarchar](255) NULL, [id_902] [float]
CREATE TABLE [jato].[option_list](
[vehicle_id] [bigint] NOT NULL,
[option_id] [int] NOT NULL,
[option_type] [varchar](10) NULL,
[option_code] [varchar](255) NULL,
[manuf_name] [nvarchar](255) NULL,
[id_902] [float] NULL,
[id_903] [float] NULL,
[id_904] [float] NULL,
[id_905] [float] NULL,
[id_100902] [float] NULL,
[id_100903] [float] NULL,
[id_100904] [float] NULL,
[id_100905] [float] NULL,
CONSTRAINT [PK_OPTIONLIST] PRIMARY KEY CLUSTERED
(
[vehicle_id] ASC,
[option_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我想在其中插入值
以下查询工作正常:
INSERT INTO jato.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
values
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0)
但如果我在同一个查询中添加其他值,我会遇到从varchar
到int的转换失败,而我的列顺序没有改变。例如,以下查询不起作用,我在SQL将“MG”转换为int时出错:
INSERT INTO jato.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
values
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0),
(11688620170510,1190,'O',881,'Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
我不明白我做错了什么
有人知道吗?那么,
我找到了答案。我必须为所有行键入相同格式的值
就我而言:
INSERT INTO jato.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
values
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0),
(11688620170510,1190,'O',881,'Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
必须是:
INSERT INTO jato.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
values
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0),
(11688620170510,1190,'O','881','Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
我不得不在881附近添加一些引号。您的问题在于第二行值:
(11688620170510,1190,'O',881,'Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
改为:
(11688620170510,1190,'O','881','Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
那就行了。总之,您的代码应该如下所示:
INSERT INTO dbo.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
values
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0),
(11688620170510,1190,'O','881','Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
语句中出现错误的实际原因是您使用了
VALUES
表值构造函数。在这种情况下,如中所述,多行INSERT语句中指定的值遵循UNION ALL语法的数据类型转换属性。这会导致将不匹配的类型隐式转换为优先级更高的类型
因此,对于问题中的数据,第一行的值'MG'
(varchar
)被隐式转换为int
,因为第二行有881
(int
),并且int
数据类型的顺序高于varchar
数据类型
通过以下方式之一执行INSERT
语句:
- 使用单个语句和apprapriate
数据类型(列varchar
选项的值
和'MG'
)'881'
- 使用两个单独的语句和
和varchar
数据类型(列int
选项的值
和'MG'
)881
INSERT
语句:
INSERT INTO dbo.option_list
(vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
VALUES
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0),
(11688620170510,1190,'O','881','Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)
两条插入语句:
INSERT INTO dbo.option_list (vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
VALUES
(11280320191201,1142,'C','MG','Machine Grey Metallic',0,0,0,0,0,0,0,0)
INSERT INTO dbo.option_list (vehicle_id,option_id,option_type,option_code,manuf_name,id_902,id_903,id_904,id_905,id_100902,id_100903,id_100904,id_100905)
VALUES
(11688620170510,1190,'O',881,'Automatic boot pull down',635.25,525,0,0,635.25,525,0,0)