Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL中插入多个值,转换失败_Sql Server_Insert - Fatal编程技术网

Sql server 在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]

我有一个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] 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)