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 中都有索引。