2017-03-08 45 views
1

我有一個查詢,我試圖測試。如果查詢使用現有主鍵在表中找到數據,則該查詢應更新數據。如果沒有,則插入表格中。合併,當匹配查詢給出錯誤sql服務器

主鍵的類型爲int,在我可以看到的屬性中,Identity被設置爲「True」,我假設它表示如果插入主鍵,它將自動設置主鍵的新ID。

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia FROM Test_table) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 

這裏的問題是這個查詢不起作用,它永遠不會插入數據或更新。此外,查詢被編譯,我沒有得到任何編譯錯誤

而且我想原因該查詢工作,因爲那時我會用JAVA編寫的語句來查詢數據庫,所以我假設我可以做

SELECT ? ID,? Fascia FROM Test_table 

這樣我就可以用java中的set方法傳遞值。

請讓我知道我的查詢是否有問題。

+0

「這裏的問題是這個查詢不起作用」。等我拿起我的水晶球去弄清楚什麼是錯的時候,請繼續。 「查詢提供錯誤」那麼,那麼錯誤是什麼,爲什麼我們在黑暗中如果你想要我們的幫助? – HoneyBadger

+0

@HoneyBadger我不會離開你在黑暗中......查詢不會更新或插入,但它會得到執行沒有任何錯誤。更新的問題。 – user3384231

回答

0

您正在從目標表中選擇作爲源。

您或者需要刪除您的FROM Test_table或在您的merge之前的Test_table中至少有一行。

rextester演示:http://rextester.com/XROJD28508

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia --FROM Test_table 
    ) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 
+0

非常感謝。我刪除了From Test_table。 – user3384231

+0

@ user3384231樂意幫忙! – SqlZim