我只是在删除另一个第3行的情况下尝试删除两行。现在,这里的问题是,第3行有一个条件,只有值#34; A"列" MAN",它应删除相应的行。
我在Sybase(使用Interactive SQL IDE的SQL Anywhere)中进行此操作。
我无法使用@@ ROWCOUNT。
有人可以给我一个查询,或者如何实现这一点。
从EFS删除 姓名=' MAN' AND VAL =' A'
如果(DeleteSuccessful) { 从EFS中删除 姓名=' MAN_1' AND NAME =' MAN_2' }
我希望在Sybase的单个查询中实现此目的。
我也可以考虑通过首先检查VAL列的值来实现这一点,如果它是XX,那么我可以使用WHERE NAME =' MAN AND NAME =&#39编写一个查询来删除所有3行; MAN_1' AND NAME =' MAN_2'。这也是一种方法。但是,在单个查询/
中,不知道如何使用Sybase中的语法来完成它答案 0 :(得分:1)
我认为您应该检查这些值是否存在并在一个查询中执行
DELETE FROM EFS
WHERE (NAME='MAN' AND VAL='A')
OR
(
(NAME='MAN_1' AND NAME='MAN_2')
AND
EXISTS (SELECT * FROM EFS WHERE NAME='MAN' AND VAL='A')
)
答案 1 :(得分:1)
我相信你和valex都得到了正确的结果,但你的语法有点偏。最好使用IN与OR来提高性能。
IF EXISTS (SELECT * FROM EFS WHERE NAME='MAN' AND VAL='A')
BEGIN
DELETE FROM EFS WHERE NAME IN ('MAN','MAN_2','MAN_3')
END
并且,我认为你可以使用@@ rowcount,也许你不会认为这是单一的陈述方法,但它也有效,例如。
select * from tempdb..test
irecord
1
2
3
99
declare @deleted INT
delete from tempdb..test where irecord = 3
select @deleted = @@rowcount
if @deleted > 0
begin
print 'deletion detected'
delete from tempdb..test where irecord IN (1,2)
end
else
print 'no deletion detected'
1 row(s) affected.
1 row(s) affected.
deletion detected
2 row(s) affected.
select * from tempdb..test
irecord
99