关于一条delete语句如何写的问题

myperry 2003-08-29 02:02:11
有一个TABLE1的内容如下:
a1 a2
1000 N001
1000 N002
1000 N003
1000 N004
1000 N005
1000 N006
1000 N007
1001 N001
1001 N003
1001 N007
...
其中(a1+a2)是本表的主键值.
我想在事先不知a2有多少个值的情况下,用每次删除一笔记录的效果,来删除此表中所有a1='1000'的记录.
也就是说不用delete table1 where a1='1000',因为此语句一次会删除多条记录.

请问这样的语句应该如何写?
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierong 2003-08-29
  • 打赏
  • 举报
回复
declare @count int
declare @i int
select @i=1
select @count=(select count(a1) from table1 where a1='1000')
while @i<=@count
delete table1 where a1 in(select top 1 a1 from table1 where a1='1000')
select @i=@i+1
loop
sdhdy 2003-08-29
  • 打赏
  • 举报
回复
while
begin
......
end
myperry 2003-08-29
  • 打赏
  • 举报
回复
我不会,请指点.是用WHILE语句吗?

怎么写?要循环多少次, 有没有for ... to ... end 语句?
king0401 2003-08-29
  • 打赏
  • 举报
回复
自己加一个循环就好了
myperry 2003-08-29
  • 打赏
  • 举报
回复
以上所有方法只解决了一半问题,即删除一条记录.

没有解决逐个删除所有记录的问题!
eminena 2003-08-29
  • 打赏
  • 举报
回复
declare @a3 char(8)
select top 1 @a3=a1+a2 from table1 where a1='1000'
delete table1 where @a3=a1+a2
CrazyFor 2003-08-29
  • 打赏
  • 举报
回复
letsflytogether(琴剑楼主) 少加了一个条件

declare @a2 char(4)
select top 1 @a2=a2 from table1 where a1='1000'
delete table1 where a2=@a2 and a1='1000'
yujohny 2003-08-29
  • 打赏
  • 举报
回复
更正一下:
declare @a2 char(4)
select top 1 @a2=a2 from table1 where a1='1000'
delete table1 where a2=@a2 and a1='1000'
伍子V5 2003-08-29
  • 打赏
  • 举报
回复
try again

declare @a2 char(4)
select top 1 @a2=a2 from table1 where a1='1000'
delete table1 where a2=@a2
CrazyFor 2003-08-29
  • 打赏
  • 举报
回复
Transact-SQL 参考


SET ROWCOUNT
使 Microsoft® SQL Server™ 在返回指定的行数之后停止处理查询。

语法
SET ROWCOUNT { number | @number_var }

参数
number | @number_var

是在停止给定查询之前要处理的行数(整数)。

注释
建议将当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句重新编写为使用 TOP 语法。有关更多信息,请参见 DELETE、INSERT 或 UPDATE。

对于在远程表和本地及远程分区视图上执行的 INSERT、UPDATE 和 DELETE 语句,忽略 SET ROWCOUNT 选项设置。

若要关闭该选项(以便返回所有的行),请将 SET ROWCOUNT 指定为 0。



说明 设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在已受指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但限制键集的行集和不感知游标。使用该选项时应谨慎,它主要与 SELECT 语句一起使用。


如果行数的值较小,则 SET ROWCOUNT 替代 SELECT 语句 TOP 关键字。

SET ROWCOUNT 的设置是在执行或运行时设置,而不是在分析时设置。

权限
SET ROWCOUNT 权限默认授予所有用户。

示例
SET ROWCOUNT 在指定的行数后停止处理。在下例中,注意有 x 行满足预付款少于或等于 $5,000 的条件;但是,从更新所返回的行数中可以看出并非所有的行都得到处理。ROWCOUNT 影响所有的 Transact-SQL 语句。

USE pubs
GO
SELECT count(*) AS Cnt
FROM titles
WHERE advance >= 5000
GO

下面是结果集:

Cnt
-----------
11

(1 row(s) affected)

现在,将 ROWCOUNT 设置为 4,并更新预付款等于或大于 $5,000 的所有行。

-- SET ROWCOUNT to 4.
SET ROWCOUNT 4
GO
UPDATE titles
SET advance = 5000
WHERE advance >= 5000
GO


请参见

SET

©1988-2000 Microsoft Corporation。保留所有权利。
saucer 2003-08-29
  • 打赏
  • 举报
回复
try

set rowcount 1
delete table1 where a1='1000'
set rowcount 0

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧