Insert to table then Conversion failed when converting the varchar value to data type int 数据类型插入到 table 然后转换失败
Insert to table then Conversion failed when converting the varchar value to data type int
我正在尝试 INSERT
一行,但该行不存在。我有2个table,我1个检查,如果第2个table中不存在记录,那么INSERT
.
DECLARE @Counter int;
DECLARE @jumlah int;
DECLARE @namamerchant varchar(200);
DECLARE @namapemilik varchar(200);
DECLARE @alamat varchar(200);
SET @Counter = 1;
SELECT @jumlah = COUNT(*)
FROM ##TempMerchant_upload_id tmui;
SELECT @jumlah;
WHILE (@Counter <= @jumlah)
BEGIN
SELECT @namamerchant = tmui.Nama_Merchant
FROM ##TempMerchant_upload_id tmui
WHERE tmui.id = @Counter;
SELECT @alamat = tmui.Alamat_Pemilik
FROM ##TempMerchant_upload_id tmui
WHERE tmui.id = @Counter;
SELECT @namapemilik = Nama_Pemilik
FROM ##TempMerchant_upload_id
WHERE ##TempMerchant_upload_id.id = @Counter;
IF (SELECT COUNT(*)
FROM merchant_negative_db_copy mndc
WHERE mndc.Nama_Merchant = @namamerchant
AND mndc.Alamat_Merchant = @alamat
AND mndc.Nama_Pemilik = @namapemilik) = 0
BEGIN
SET @sql = 'INSERT INTO merchant_negative_db_copy SELECT *,tes, GETDATE(),0 FROM ##TempMerchant_upload_id where id = ''' + @Counter + '''';
EXEC (@sql);
END;
SET @Counter = @Counter + 1;
END;
当我 运行 它显示这样的错误:
Conversion failed when converting the varchar value 'INSERT INTO merchant_negative_db_copy SELECT *,tes, GETDATE(),0 FROM ##TempMerchant_upload_id where id = '' to data type int.
有什么建议吗?
我发布了一个答案,因为被接受的答案是错误的。通常,我会等待 真实 问题的描述,因此可以在没有循环的情况下编写单个查询, 或 临时 table.
首先没有理由使用动态 SQL。 @Counter
可以直接在 SQL 查询中使用:
INSERT INTO merchant_negative_db_copy (ColA,ColB,...)
SELECT a,b,....,tes, GETDATE(),0
FROM ##TempMerchant_upload_id
WHERE id = @Counter
没有理由循环检查记录是否已经存在。可以为此使用 WHERE NOT EXISTS ( select 1 from target where ....)
。完成后,就不再需要 Counter
变量了。另一种选择是在源和目标之间使用 LEFT JOIN,并且只插入没有匹配的记录。
INSERT INTO merchant_negative_db_copy (ColA,ColB,...)
SELECT a,b,....,tes, GETDATE(),0
FROM ##TempMerchant_upload_id source
WHERE NOT EXISTS
( SELECT 1
FROM merchant_negative_db_copy mndc
WHERE mndc.Nama_Merchant = source.Nama_Merchant
AND mndc.Alamat_Merchant = source.Alamat_Merchant
AND mndc.Nama_Pemilik = source.Nama_Pemilik
)
这将 至少 比循环快 N 倍,特别是如果连接字段 Nama_Merchant、Alamat_Merchant 和 Nama_Pemilik 字段在两个 table 中都有索引。
我正在尝试 INSERT
一行,但该行不存在。我有2个table,我1个检查,如果第2个table中不存在记录,那么INSERT
.
DECLARE @Counter int;
DECLARE @jumlah int;
DECLARE @namamerchant varchar(200);
DECLARE @namapemilik varchar(200);
DECLARE @alamat varchar(200);
SET @Counter = 1;
SELECT @jumlah = COUNT(*)
FROM ##TempMerchant_upload_id tmui;
SELECT @jumlah;
WHILE (@Counter <= @jumlah)
BEGIN
SELECT @namamerchant = tmui.Nama_Merchant
FROM ##TempMerchant_upload_id tmui
WHERE tmui.id = @Counter;
SELECT @alamat = tmui.Alamat_Pemilik
FROM ##TempMerchant_upload_id tmui
WHERE tmui.id = @Counter;
SELECT @namapemilik = Nama_Pemilik
FROM ##TempMerchant_upload_id
WHERE ##TempMerchant_upload_id.id = @Counter;
IF (SELECT COUNT(*)
FROM merchant_negative_db_copy mndc
WHERE mndc.Nama_Merchant = @namamerchant
AND mndc.Alamat_Merchant = @alamat
AND mndc.Nama_Pemilik = @namapemilik) = 0
BEGIN
SET @sql = 'INSERT INTO merchant_negative_db_copy SELECT *,tes, GETDATE(),0 FROM ##TempMerchant_upload_id where id = ''' + @Counter + '''';
EXEC (@sql);
END;
SET @Counter = @Counter + 1;
END;
当我 运行 它显示这样的错误:
Conversion failed when converting the varchar value 'INSERT INTO merchant_negative_db_copy SELECT *,tes, GETDATE(),0 FROM ##TempMerchant_upload_id where id = '' to data type int.
有什么建议吗?
我发布了一个答案,因为被接受的答案是错误的。通常,我会等待 真实 问题的描述,因此可以在没有循环的情况下编写单个查询, 或 临时 table.
首先没有理由使用动态 SQL。 @Counter
可以直接在 SQL 查询中使用:
INSERT INTO merchant_negative_db_copy (ColA,ColB,...)
SELECT a,b,....,tes, GETDATE(),0
FROM ##TempMerchant_upload_id
WHERE id = @Counter
没有理由循环检查记录是否已经存在。可以为此使用 WHERE NOT EXISTS ( select 1 from target where ....)
。完成后,就不再需要 Counter
变量了。另一种选择是在源和目标之间使用 LEFT JOIN,并且只插入没有匹配的记录。
INSERT INTO merchant_negative_db_copy (ColA,ColB,...)
SELECT a,b,....,tes, GETDATE(),0
FROM ##TempMerchant_upload_id source
WHERE NOT EXISTS
( SELECT 1
FROM merchant_negative_db_copy mndc
WHERE mndc.Nama_Merchant = source.Nama_Merchant
AND mndc.Alamat_Merchant = source.Alamat_Merchant
AND mndc.Nama_Pemilik = source.Nama_Pemilik
)
这将 至少 比循环快 N 倍,特别是如果连接字段 Nama_Merchant、Alamat_Merchant 和 Nama_Pemilik 字段在两个 table 中都有索引。