检查做插入
表1列之前,现有行:检查做插入
clinic_code,schedule_date,schedule_time,SOURCE_ID
表2列:
clinic_code,schedule_date,schedule_time
有一个存储程序执行:
1.删除Table1中的所有记录,其中clinic_code ='ABC'AND schedule_date = xyz 2.从table2中插入所有记录,其中table2.clinic_code ='ABC'AND table2.schedule_date = xyz into table1。
我想在步骤2中进行更改。
* 2。从table2插入所有记录,其中table2.clinic_code ='ABC'AND table2.schedule_date = xyz,但不要覆盖table1中source_id = 2的那些行。
下面是步骤2中的原始插入语句:
INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
表名,并附加列已经离开了,如果这将是有帮助的,我可以把列的确切数目。
我不确定我是否完全遵循,因为如果您将行插入到table1中,那么table1.col3将不具有这些行的值。如果你只是想避免table1.col3 = 2,你可以使用where子句是这样的:
INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
WHERE table2.col3 <> 2
这将避免在插入值2到table1.col3,因为table2.col3就是你从中拉出来。如果我忽略了这一点,请告诉我,但那应该这样做。
编辑 - 因为你说的表1和表2的记录是相似的,假设有一栏,你可以在两个表之间的连接上,你可以做这样的事情:
INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
LEFT OUTER JOIN table1 t1 ON tl.colX = table2.colX
WHERE table1.col3 <> 2
的想法是,你现在已经在你的SELECT中包含了table1,并且也可以将它包含在你的WHERE子句中。 (原谅我,如果混叠语法关闭其他SQL口味,我主要是在T-SQL的经验。)
不完全是,因为table1已经有记录。与表2类似。所以我想要插入记录,而不是那些有table1.col3 = 2的记录。在这些记录中,行应该在table1中保持不变。 – russds 2011-03-10 22:18:10
这对于通用列名称以及以AND等结尾的连接来说有点困难......我的想法是在table1和table2之间进行某种连接,然后您可以使用它们根据table1.col3排除不想要的行值为2. table1和table2究竟有什么相似之处?他们之间是否有任何外键关系? – Zannjaminderson 2011-03-10 22:40:08
谢谢Zannjaminderson,我认为你正在做点什么。桌上的PK由col1和col2组成。我有问题,如果使col3的主键的一部分,然后它被插入,我有同一行2,一个col3 = 2和一个col3 = 1。如果我按原样保留PK,则会发生错误冲突,即具有相同PK的另一行试图插入。我怎么能通过这个?它轻声地杀了我。 :) – russds 2011-03-10 23:26:07
嗯,我不知道哪个SQL您正在使用所以这里是一个标准的SQL脚本的更多信息:
BEGIN TRANSACTION ;
IF NOT EXISTS (SELECT * FROM dbo.table1 WHERE col3 = 2)
BEGIN ;
...your insert goes here
END ;
COMMIT ;
使用MS SQL 2005.我尝试了上述,但是然后没有插入来自table2的其他记录。 (table1和table2非常相似。)谢谢! – russds 2011-03-10 22:41:07
但是你没有使用table1插入行,只是table2和table3。你不是说你不想插入table2.col3 = 2的行吗? – Lamak 2011-03-10 20:47:38
不。表1和表2非常相似(但不完全),我也不重复,所以如果Table1.col3 = 2中有一行,我不希望插入该行,其余的是。希望有帮助,谢谢! – russds 2011-03-10 21:24:15
我必须说这没有任何意义。你的例子正确吗?如果在table1中有一行col3等于值2,则根本不会执行任何插入操作,因为它总是有一行,其中table1 col3为2.是否存在关于t1.col1 = t2.col1和/或t1.col2 = t3.col2(如你在这里的商业密钥)? – cairnz 2011-03-10 22:35:04