表1列:
clinic_code,schedule_date,schedule_time,source_id
表2列:
clinic_code,schedule_date,schedule_time
存储过程包括:
1.删除Table1中的所有记录,其中clinic_code ='ABC'和schedule_date = xyz
2.将table2中的所有记录INSERT,table2.clinic_code ='ABC'和table2.schedule_date = xyz插入table1。
我想在第2步中进行更改。
* 2。 INSERT来自table2的所有记录,其中table2.clinic_code ='ABC'和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...
表名和其他列已被省略,如果它有用,我可以输入确切的列数。
答案 0 :(得分:1)
我不确定我是否完全遵循,因为如果你将行插入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是你从中拉出来的。如果我错过了这里的要点,请告诉我,但是应该这样做。
编辑 - 鉴于你已经说过table1和table2之间的记录是相似的,假设你可以在两个表之间加入一个列,你可以这样做:
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中经验丰富。)
答案 1 :(得分:0)
我不知道你使用的是哪个SQL,所以这里是一个标准的SQL脚本:
BEGIN TRANSACTION ;
IF NOT EXISTS ( SELECT * FROM dbo.table1 WHERE col3 = 2 )
BEGIN ;
...your insert goes here
END ;
COMMIT ;