带有条件和两个表的INSERT语句语法

时间:2013-12-01 11:35:36

标签: sql sql-server

我想将相同的条目插入到2个不同的表(结构上相同)中,条件是其中一个表中的a_text的当前值不存在于该表的任何位置。这是我的第一次尝试

 cur.execute('''IF NOT EXISTS (SELECT * FROM checktble WHERE    a_text 
 = %s)   ''', (a_text))THEN INSERT INTO tble1 AND INSERT INTO tble2 
(a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag) VALUES (%s,%s,%s,%s,%s,%s,%s)''',
(a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag))  

但有人可以清理并为我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可能需要以下内容(伪代码,因为我没有您的表格结构)。

IF NOT EXISTS (SELECT * FROM checktble WHERE a_text = 'yourtexthere')
BEGIN
    BEGIN TRANSACTION doubleInsert
        INSERT INTO tble1 (a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag)
            VALUES ('blabla', 'more blabla', 'linkgoeshere', 'Bla!', 'Source', 'GETDATE(),  'tag';
            INSERT INTO tble2 (a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag)
            VALUES ('blabla', 'more blabla', 'linkgoeshere', 'Bla!', 'Source', 'GETDATE(),  'tag';
    COMMIT TRANSACTION doubleInsert
END

答案 1 :(得分:0)

另一个检查checktable并在一个语句中插入两个表t1和t2(因此是事务):

insert into t1 (a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag)
    output inserted.a_text, inserted.a_fulltext, inserted.a_link, inserted.a_title, 
            inserted.a_source, inserted.a_date, inserted.a_tag
    into t2(a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag
 SELECT a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag
 from (values
    ( 'myvalue for a_text',... a_fulltext,a_link,a_title,a_source,a_date,a_tag
     )) 
        as T(a_text,a_fulltext,a_link,a_title,a_source,a_date,a_tag) 
 where not exists (select 1 from checktable 
            where checktable.a_text = T.a_text)