我正在尝试从表A中将记录插入到表B中,其中记录在表B中不存在。只有我需要的一些字段在表A中,所以我设置了一些局部变量来插入这些数据。在运行下面的查询时,我收到错误消息
“消息8114,级别16,状态5,行17错误将数据类型varchar转换为数字。”
是否有人能够告诉我我做错了什么,并且可能提供一种可行的替代方法。非常感谢(并对查询格式化道歉)
DECLARE @SupplierID as integer
DECLARE @UnitOfMeasurementID as integer
DECLARE @MinOrderQuantity as integer
DECLARE @SupplierProductGroupID as integer
DECLARE @ProductCondition as varchar (3)
SET @SupplierID = 1007
SET @UnitOfMeasurementID = 1
SET @MinOrderQuantity = 1
SET @SupplierProductGroupID = 41
SET @ProductCondition = 'N'
-- Insert
insert into tblProduct (SupplierID,
UnitOfMeasurementID,
MinOrderQuantity,
SupplierProductGroupID,
ProductCondition,
PartNumber,
ProductName,
CostPrice)
select
PartNumber,
ProductName,
CostPrice,
@SupplierID,
@UnitOfMeasurementID,
@MinOrderQuantity,
@SupplierProductGroupID,
@ProductCondition
from BearmachTemp source
where not exists
(
select * from tblProduct
where tblProduct.PartNumber = source.PartNumber
and tblProduct.ProductName = source.ProductName
)
答案 0 :(得分:2)
SELECT的列顺序错误
select
@SupplierID,
@UnitOfMeasurementID,
@MinOrderQuantity,
@SupplierProductGroupID,
@ProductCondition,
PartNumber,
ProductName,
CostPrice
from BearmachTemp source
where not exists
(
select * from tblProduct
where tblProduct.PartNumber = source.PartNumber
and tblProduct.ProductName = source.ProductName
)
答案 1 :(得分:0)
在插入语句中插入列和值应具有相同的顺序,因此:
insert into tblProduct (SupplierID,
UnitOfMeasurementID,
MinOrderQuantity,
SupplierProductGroupID,
ProductCondition,
PartNumber,
ProductName,
CostPrice)
select
@SupplierID,
@UnitOfMeasurementID,
@MinOrderQuantity,
@SupplierProductGroupID,
@ProductCondition,
PartNumber,
ProductName,
CostPrice
from BearmachTemp source
where not exists
(
select * from tblProduct
where tblProduct.PartNumber = source.PartNumber
and tblProduct.ProductName = source.ProductName
)
答案 2 :(得分:0)
查看您的查询听起来好像您希望SQL按名称匹配字段,但它没有。 INSERT INTO子句中字段的名称是无关紧要的 - 匹配将根据顺序进行,因此在您的情况下,PartNumber的值将进入SupplierID,ProductName的值将进入UnitOfMeasurementID等。只需更改顺序插入到tblProduct(...)部分或select ...部分中的字段使它们匹配,你就可以了。