2016-06-18 9 views
1

を使用して削除し、私はいくつかの行を削除するには、このクエリを使用します。MSSQLは、行コンストラクタMySQLで

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

*複合PK(ID1、ID2)このクエリは文句を言わないMsSQLが上で動作

。誰もが、これは動作するはずです私にMsSQLが

+0

あなたのIDのデータ型は何ですか?そのvarcharこれが動作する必要があります。: 'delete from test(( '' 1 '、' 1 ')、(' 2 '、' 1 ')、(' 3 '、' 1 ') ) ' – Kayathiri

+0

@KayathiriはSQL Serverにはありません。 –

+0

以下の回答の1つが役に立った場合は、こちらを参照してください:http://stackoverflow.com/help/someone-answers – JustSomeDude

答えて

3

の同等のクエリを伝えることができ、それはしかし、もう少し冗長です:

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

あなたが本当に使用したい場合は、あなたの問題を解決するためのより良い方法があるかもしれないけど行コンストラクターでは、値コンストラクターを使用して作成された仮想エンティティーに単純に参加できます。

作成testから3行削除をもたらすべきである行コンストラクタ

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; 

に上記DMLクエリを使用して行を削除するいくつかのテストデータ

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; 

:ここでは一例です。

関連する問題