cMi*_*nor 97 sql sql-server sql-delete
我在SQL Server中有一个表.我想从中删除前1000行.但是,我尝试了这个,但我没有删除前1000行,而是删除了表中的所有行.
这是代码:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 182
您尝试的代码实际上是两个语句.A DELETE
接着是a SELECT
.
您没有TOP
按照什么定义.
对于从CTE或类似表中删除的特定排序标准,表达式是最有效的方式.
;WITH CTE AS
(
SELECT TOP 1000 *
FROM [mytab]
ORDER BY a1
)
DELETE FROM CTE
Run Code Online (Sandbox Code Playgroud)
Ole*_*Dok 78
可能更适合sql2005 +使用:
DELETE TOP (1000)
FROM [MyTab]
WHERE YourConditions
Run Code Online (Sandbox Code Playgroud)
对于Sql2000:
DELETE FROM [MyTab]
WHERE YourIdField IN
(
SELECT TOP 1000
YourIdField
FROM [MyTab]
WHERE YourConditions
)
Run Code Online (Sandbox Code Playgroud)
但
如果要删除特定的行子集而不是任意子集,则应明确指定子查询的顺序:
DELETE FROM [MyTab]
WHERE YourIdField IN
(
SELECT TOP 1000
YourIdField
FROM [MyTab]
WHERE YourConditions
ORDER BY ExplicitSortOrder
)
Run Code Online (Sandbox Code Playgroud)
感谢tp @gbn提及并要求更清晰准确的答案.
Ris*_*gar 24
如下面的链接中所定义,您可以直接删除
USE AdventureWorks2008R2;
GO
DELETE TOP (20)
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO
Run Code Online (Sandbox Code Playgroud)
http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx
delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
228721 次 |
最近记录: |