2016-06-18 8 views
1

in MySQL verwenden, verwende ich diese Abfrage einige Zeilen löschen:MSSQL löschen Reihe Konstrukteurs

DELETE 
    FROM test 
    WHERE (id1, id2) IN ((1, 1), (2,1), (3,1)) 

* Composite-PK (ID1, ID2)

diese Abfrage wird nicht auf MsSQL funktioniert. Wer kann mir sagen, die entsprechende Abfrage auf MsSQL

+0

Wie lautet der Datentyp Ihrer ID? Wenn sein varchar sollte dies funktionieren .: 'löschen aus test wo (id1, id2) in (('1', '1'), ('2', '1'), ('3', '1')) ' – Kayathiri

+0

@Kayathiri nicht auf SQL Server. –

+0

Wenn eine der folgenden Antworten Ihnen geholfen hat, lesen Sie bitte: http://stackoverflow.com/help/someone-answers – JustSomeDude

Antwort

3

Dies sollte funktionieren, ist es ein bisschen ausführlicher aber:

DELETE 
FROM test 
WHERE id1 IN (1, 2 , 3) AND id2 = 1 
3

Obwohl es ein besserer Ansatz sein kann, um Ihr Problem zu lösen, wenn Sie wirklich verwenden möchten Als Zeilenkonstruktor können Sie einfach einer virtuellen Entität beitreten, die mit einem Wertekonstruktor erstellt wird. Hier ein Beispiel:

Erstellen einige Testdaten

create table test (
    id1 int not null, 
    id2 int not null, 
    primary key clustered (id1, id2)); 

insert test (
    id1, 
    id2) 
select top (100) 
    id1, 
    id2 
from (
    select distinct 
     id1 = abs(checksum(newid())) % 10, 
     id2 = abs(checksum(newid())) % 10 
    from sys.columns a 
    cross join sys.columns b) c; 

Zeilen löschen ein Zeilenkonstruktor mit

delete a 
from test a 
join (
    values (1, 1), (2, 1), (3, 1)) b(id1, id2) 
     on a.id1 = b.id1 
      and a.id2 = b.id2; 

Die obige DML-Abfrage führen sollten drei Zeilen aus test in löschen.