使用行构造函数删除MSSQL

时间:2016-06-18 03:31:58

标签: mysql sql-server constructor row

在MySQL中,我使用此查询删除一些行:

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

*复合PK(id1,id2)

此查询不适用于MsSQL。任何人都可以告诉我在MsSQL上的等效查询

2 个答案:

答案 0 :(得分:3)

这应该有用,但它有点冗长:

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

答案 1 :(得分:3)

虽然可能有更好的方法来解决您的问题,但如果您真的想使用行构造函数,则可以简单地加入使用值构造函数创建的虚拟实体。这是一个例子:

创建一些测试数据

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;

使用行构造函数删除行

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查询应导致从test删除三行。