2015-06-19 62 views
1

是否有使用說明道:合併到沒有行

MERGE INTO MySchema.MyTable AS Target 
USING (VALUES 
........ 
) 

什麼也沒有,而不是點?通常你會在那裏得到類似於(firstValue,SecondValue,...,LastValue)列表的東西,對於你想合併的每一行都有一個,但是我希望能夠用NO行編寫指令,這樣DELETE部分MERGE刪除所有行。

這是因爲我正在使用自動創建MERGE指令的存儲過程,但有時從我開始的表是空的。

當然,我試着用:

MERGE INTO MySchema.MyTable AS Target USING (VALUES) 

,但它是不能接受的。

謝謝。

+0

請發佈您正在使用的整個MERGE語句的一個實例* is * working,即,其中t他使用子句有一些價值。 (我在問,因爲在MERGE文檔中沒有看到允許在USING子句中使用關鍵字VALUES的任何內容。) –

+0

如果您只是想刪除爲什麼不使用刪除語句? –

+0

合併到[DBO]。[MyTable的]作爲靶 USING(VALUES (1, 'Attivo') ,(2, 'Disabilitato') ,(3, 'Bloccato') )AS源([IDMyField] ,[MyField]) ON(Target。[IDMyField] = Source。[IDMyField]) WHEN MATCHED AND( \t NULLIF(Source。[MyField],Target。[MyField])IS NOT NULL OR NULLIF(Target。 MyField的],源。[MyField的])IS NOT NULL)THEN UPDATE SET [MyField的] =源。[MyField的] WHEN NOT MATCHED BY TARGET THEN INSERT([IDMyField],[MyField的]) VALUES(源。 [IDMyField],來源。[MyField]) 當不匹配源時 DELETE; –

回答

1

如果您正在生成的內部查詢,和外面的查詢上的預定義的ID字段匹配,下面的工作:

MERGE INTO tester AS Target 
USING (

select null as test1 --generate select null, alias as your id field 
) as SOURCE on target.test1 = source.test1 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE; 

爲了您particluar情況:

MERGE INTO table1 AS Target 
USING (

values(null) 
) as SOURCE(id) on target.id = source.id 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE; 
+0

是的,謝謝。這工作正常。 –

+0

ops ...等待...它似乎與一個簡單的表只有一個可爲空的列一起工作。但是當我用一個普通的表來嘗試它時,它似乎不起作用,因爲表的PK值當然不能爲空。我錯了嗎? –

+1

經過多次努力,並對您的第一個答案thankx,我認爲一個可行的解決方案是這樣的:USING(SELECT * FROM MyTable WHERE 1 = 0) –

1

一可行的解決方案是:

USING (SELECT * FROM MyTable WHERE 1 = 0)