Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在成功删除另一行(基于列条件)的基础上删除两行-Sybase_Sql_Sql Server_Sql Server 2008_Sybase_Sqlanywhere - Fatal编程技术网

Sql 在成功删除另一行(基于列条件)的基础上删除两行-Sybase

Sql 在成功删除另一行(基于列条件)的基础上删除两行-Sybase,sql,sql-server,sql-server-2008,sybase,sqlanywhere,Sql,Sql Server,Sql Server 2008,Sybase,Sqlanywhere,仅当删除第三行时,我才尝试删除两行。现在,这里需要注意的是,第三行有一个条件,其中仅对于MAN列的值,它应该删除相应的行 我在Sybase SQL Anywhere中使用交互式SQL IDE进行此操作 我无法使用@@ROWCOUNT 请有人给我这个问题或如何实现这一点,请 算法: 从EFS中删除 其中NAME='MAN'和VAL='A' 如果删除成功 { 从EFS中删除 其中NAME='MAN_1'和NAME='MAN_2' } 我想在Sybase中的单个查询中实现这一点 备选办法: 我还可以通

仅当删除第三行时,我才尝试删除两行。现在,这里需要注意的是,第三行有一个条件,其中仅对于MAN列的值,它应该删除相应的行

我在Sybase SQL Anywhere中使用交互式SQL IDE进行此操作

我无法使用@@ROWCOUNT

请有人给我这个问题或如何实现这一点,请

算法: 从EFS中删除 其中NAME='MAN'和VAL='A'

如果删除成功 { 从EFS中删除 其中NAME='MAN_1'和NAME='MAN_2' }

我想在Sybase中的单个查询中实现这一点

备选办法:
我还可以通过首先检查VAL列的值来实现这一点,如果它是XX,那么我可以编写一个查询,使用WHERE NAME='MAN和NAME='MAN_1'和NAME='MAN_2'删除所有3行。这也是一种方法。但是我不知道如何在一个查询中使用Sybase中的语法来完成它/

我认为您应该检查这些值是否存在,并在一个查询中完成

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')
         )

我相信您和valex都得到了正确的结果,但是您的语法有点不正确。也更好地用于vs或用于性能

IF EXISTS (SELECT * FROM EFS WHERE NAME='MAN' AND VAL='A') 
BEGIN
  DELETE FROM EFS WHERE NAME IN ('MAN','MAN_2','MAN_3')
END

和,我认为你可以使用@ @ RooCube,也许你不认为这是一个单一的声明方法,但它也是有效的,例如

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

你的问题不清楚。如果另一个第三行被删除。。。你能把你的问题弄清楚一点,这样我们就可以帮助你了吗?@user1768024:我需要基本上删除3行。怎样业务案例是这样的,我想首先根据某个值删除一行,比如它的列Man。这意味着,我使用一个简单的删除查询,使用where条件。现在这一行被删除了,一切正常。但是另外两排呢?我需要根据删除其他两行,前提是删除了第一行。否则,不应删除其他两行。是否有剩余两行的条件?@user1768024:condition as in,where中只有一个条件。它的简单伴侣。但是,我受到限制,不能在Sybase中使用存储过程。我是第一次写查询。您是否知道如何在不使用SP/Function的情况下实现它,以及Sybase SQL Anywhere使用SQL Interactive支持哪些功能IDE@user1768024:Mate,我自己编写了一个简单的算法,在上面的问题中进行了更新,但在Sybase中为单个查询支持的关键字方面遇到了困难。很惊讶,你还不明白。谢谢,但我想你的问题是错的吧?我已经有了自己的查询框架,如果存在,则更简单。从EFS中选择*其中NAME='MAN'和VAL='A',然后从EFS中删除NAME='MAN'或NAME='MAN_2'或NAME='MAN_3'结尾。如果您能告诉我您的查询和我的查询之间的区别吗?我觉得我的更好。Crizzo,谢谢你,第二种方法被排除在外,正如我所说的,因为我们需要一个查询,因为它都是升级脚本,并且按照20年的实践:而且,IN恐怕在这里不起作用,在Sybase中不受支持吗?