Sql 如何在运行INSERT查询时执行列检查?

Sql 如何在运行INSERT查询时执行列检查?,sql,sql-server,sql-insert,Sql,Sql Server,Sql Insert,我想在带有列ID和状态的表中插入许多行。我想检查状态值是否为“关闭”。如果是“已关闭”,则忽略查询并继续,如果不是,则继续并插入行。 另外,我不能在表上添加检查或任何约束 我想这样做: 如果状态为“打开”、“进行中”,则在纸箱中插入(id、状态)值(1,“打开”) ELSE-移动到下一个查询 请建议您的解决方案。您可以使用Oracle中的Insert all使用以下逻辑 CREATE TABLE TEST_STATUS(ID INT, STATUS VARCHAR2(10)); INSERT

我想在带有列ID和状态的表中插入许多行。我想检查状态值是否为“关闭”。如果是“已关闭”,则忽略查询并继续,如果不是,则继续并插入行。 另外,我不能在表上添加检查或任何约束

我想这样做:

如果状态为“打开”、“进行中”,则在纸箱中插入(id、状态)值(1,“打开”) ELSE-移动到下一个查询


请建议您的解决方案。

您可以使用Oracle中的Insert all使用以下逻辑

CREATE TABLE TEST_STATUS(ID INT, STATUS VARCHAR2(10));

INSERT ALL
    WHEN STATUS <> 'CLOSED' THEN
    INTO TEST_STATUS VALUES(ID, STATUS)   
    SELECT 1 ID, 'CLOSED' STATUS FROM DUAL;
    
INSERT ALL
    WHEN STATUS <> 'CLOSED' THEN
    INTO TEST_STATUS VALUES(ID, STATUS)   
    SELECT 2 ID, 'PENDING' STATUS FROM DUAL;
创建表TEST_状态(ID INT,STATUS VARCHAR2(10));
全部插入
当状态为“关闭”时
进入测试状态值(ID、状态)
从DUAL中选择1个ID,“关闭”状态;
全部插入
当状态为“关闭”时
进入测试状态值(ID、状态)
从DUAL中选择2个ID,“待定”状态;

如果Oracle是DB,语法

INSERT WHEN ... THEN INTO target(col1,col2,col3)
SELECT col1,col2,col3 
  FROM source
可以直接使用,例如

INSERT WHEN status != 'CLOSED' THEN INTO carton
WITH source ( ID, status ) AS
(
 SELECT 10, 'OPEN' FROM dual UNION ALL
 SELECT 20, 'IN_PROGRESS' FROM dual UNION ALL
 SELECT 30, 'CLOSED' FROM dual UNION ALL
 SELECT 40, 'OPEN' FROM dual 
)
SELECT * FROM source

请标记您的DBMS,如果其Oracle您可以使用Insert all/first(1)场景缺少信息。如果您事先知道要插入的值,为什么不在应用程序中设置不插入的逻辑?(2) 请用您正在运行的数据库标记您的问题:mysql、oracle、sqlserver。。。?