我刚刚从 Mysql 服务器切换到 SQL 服务器。但我刚刚发现这INSERT INGORE INTO不适用于 sql server。原始代码:
INSERT IGNORE INTO DATA_EXACT_INVENTORY_LOCATIONS (ID, Code, Opslaglocatie, Omschrijving, OpVoorraad)
VALUES ('$inventorylocationID','$inventorylocationsItemCode','$inventoryStorageLocationsCode','$inventorylocationsItemDescription','$inventorylocationsCurrenctStock')
Run Code Online (Sandbox Code Playgroud)
我发现我可以使用on duplicate key update,但问题是我的 sql 查询最多包含 50 个变量。因此,用于重复密钥更新将需要大量工作。所以我想知道是否有更好的替代方案,INSERT IGNORE INTO即插即用,这样我就不必再次编写所有变量。
您可以使用not exists:
INSERT DATA_EXACT_INVENTORY_LOCATIONS (ID, Code, Opslaglocatie, Omschrijving, OpVoorraad)
SELECT ID, Code, Opslaglocatie, Omschrijving, OpVoorraad
FROM (VALUES ('$inventorylocationID', '$inventorylocationsItemCode', '$inventoryStorageLocationsCode', '$inventorylocationsItemDescription', '$inventorylocationsCurrenctStock')
) V(ID, Code, Opslaglocatie, Omschrijving, OpVoorraad)
WHERE NOT EXISTS (SELECT 1
FROM DATA_EXACT_INVENTORY_LOCATIONS deil
WHERE deil.id = v.id -- or whatever column gets the duplicate key
);
Run Code Online (Sandbox Code Playgroud)
或者,您可以重写代码以使用MERGE. 应该SELECT在两个数据库中都有效。
我还要补充一点,你应该学会使用参数。使用常量值修改查询字符串会使您的代码遭受 SQL 注入攻击和难以调试的语法错误。