2011-03-10 43 views
0

表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... 

表名,並附加列已經離開了,如果這將是有幫助的,我可以把列的確切數目。

+0

但是你沒有使用table1插入行,只是table2和table3。你不是說你不想插入table2.col3 = 2的行嗎? – Lamak 2011-03-10 20:47:38

+0

不。表1和表2非常相似(但不完全),我也不重複,所以如果Table1.col3 = 2中有一行,我不希望插入該行,其餘的是。希望有幫助,謝謝! – russds 2011-03-10 21:24:15

+0

我必須說這沒有任何意義。你的例子正確嗎?如果在table1中有一行col3等於值2,則根本不會執行任何插入操作,因爲它總是有一行,其中table1 col3爲2.是否存在關於t1.col1 = t2.col1和/或t1.col2 = t3.col2(如你在這裏的商業密鑰)? – cairnz 2011-03-10 22:35:04

回答

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就是你從中拉出來。如果我忽略了這一點,請告訴我,但那應該這樣做。

編輯 - 因爲你說的表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的經驗。)

+0

不完全是,因爲table1已經有記錄。與表2類似。所以我想要插入記錄,而不是那些有table1.col3 = 2的記錄。在這些記錄中,行應該在table1中保持不變。 – russds 2011-03-10 22:18:10

+0

這對於通用列名稱以及以AND等結尾的連接來說有點困難......我的想法是在table1和table2之間進行某種連接,然後您可以使用它們根據table1.col3排除不想要的行值爲2. table1和table2究竟有什麼相似之處?他們之間是否有任何外鍵關係? – Zannjaminderson 2011-03-10 22:40:08

+0

謝謝Zannjaminderson,我認爲你正在做點什麼。桌上的PK由col1和col2組成。我有問題,如果使col3的主鍵的一部分,然後它被插入,我有同一行2,一個col3 = 2和一個col3 = 1。如果我按原樣保留PK,則會發生錯誤衝突,即具有相同PK的另一行試圖插入。我怎麼能通過這個?它輕聲地殺了我。 :) – russds 2011-03-10 23:26:07

0

嗯,我不知道哪個SQL您正在使用所以這裏是一個標準的SQL腳本的更多信息:

BEGIN TRANSACTION ; 
     IF NOT EXISTS (SELECT * FROM dbo.table1 WHERE col3 = 2) 
     BEGIN ; 
      ...your insert goes here 
     END ; 
COMMIT ; 
+0

使用MS SQL 2005.我嘗試了上述,但是然後沒有插入來自table2的其他記錄。 (table1和table2非常相似。)謝謝! – russds 2011-03-10 22:41:07