当前位置:首页 » 编程语言 » sql未删除任何行
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql未删除任何行

发布时间: 2022-04-11 18:42:15

sql中的删除问题

delete A WHERE department <> '总部'
看看delete语法:
DELETE
从表中删除行。

语法
DELETE
[ FROM ]
{ table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}

[ FROM { < table_source > } [ ,...n ] ]

[ WHERE
{ < search_condition >
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
] }
}
]
[ OPTION ( < query_hint > [ ,...n ] ) ]

< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ]
| rowset_function [ [ AS ] table_alias ]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >

< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| < joined_table >

< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ < join_hint > ]
JOIN

< table_hint_limited > ::=
{ FASTFIRSTROW
| HOLDLOCK
| PAGLOCK
| READCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}

< table_hint > ::=
{ INDEX ( index_val [ ,...n ] )
| FASTFIRSTROW
| HOLDLOCK
| NOLOCK
| PAGLOCK
| READCOMMITTED
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}

< query_hint > ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| FAST number_rows
| FORCE ORDER
| MAXDOP
| ROBUST PLAN
| KEEP PLAN
}

参数
FROM

是可选的关键字,可用在 DELETE 关键字与目标 table_name、view_name 或 rowset_function_limited 之间。

table_name

是要从其中删除行的表的名称。

在其作用域内的 table 变量、或是将 OPENDATASOURCE 函数作为服务器名称的由四部分组成的表名(或视图名称)还可以在 DELETE 语句中作为表源使用。

WITH (<table_hint_limited> [...n])

指定目标表所允许的一个或多个表提示。需要有 WITH 关键字和圆括号。不允许有 READPAST、NOLOCK 和 READUNCOMMITTED。有关表提示的更多信息,请参见 FROM。

view_name

是视图名称。在视图的 FROM 子句中,view_name 引用的视图必须可更新且正确引用一个基表。有关可更新视图的更多信息,请参见 CREATE VIEW。

说明 如果表或视图存在于另一个数据库内或有一个不同于当前用户的所有者,则使用格式为 server_name.database.[owner].object_name 的由四部分组成的合法名称。有关更多信息,请参见 Transact-SQL 语法规则。

rowset_function_limited

OPENQUERY 或 OPENROWSET 函数,视提供程序功能而定。有关提供程序所需功能的更多信息,请参见 OLE DB 提供程序的 UPDATE 和 DELETE 语句要求。有关行集函数的更多信息,请参见 OPENQUERY 和 OPENROWSET。

FROM < table_source >

指定附加的 FROM 子句。这个对 DELETE 的 Transact-SQL 扩展使您得以从 <table_sources> 指定数据,并从第一个 FROM 子句内的表中删除相应的行。

这个扩展指定联接,可在 WHERE 子句中取代子查询来标识要删除的行。

table_name [[AS] table_alias ]
是为删除操作提供标准值的表名。

view_name [ [ AS ] table_alias ]
是为删除操作提供标准值的视图名称。带 INSTEAD OF UPDATE 触发器的视图不能是含有 FROM 子句的 UPDATE 的目标。

WITH (<table_hint>
指定一个或更多表提示。有关表提示的更多信息,请参见 FROM。

rowset_function [ [AS] table_alias ]
是行集函数名和可选别名。有关行集函数列表的更多信息,请参见行集函数。

derived_table [AS] table_alias
是从数据库中检索行的子查询。derived_table 用作对外部查询的输入。

column_alias
替换结果集内列名的可选别名。在选择列表中放入每个列的一个别名,并将整个列别名列表用圆括号括起来。
<joined_table>

由两个或更多表的积组成的结果集,例如:

SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1 = tab4.c1
ON tab2.c3 = tab4.c3

对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。

<join_type>

指定联接操作的类型。

INNER
指定返回每对匹配的行。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。

LEFT [OUTER]
指定在结果集内包含左表中所有不满足指定条件的行,并将右表中的输出列设置为 NULL 以作为对内联接所返回的所有行的补充。

RIGHT [OUTER]
指定在结果集内包含右表中所有不满足指定条件的行,并将左表中的输出列设置为 NULL 以作为对内联接所返回的所有行的补充。

FULL [OUTER]
如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为 NULL。除此之外,结果集中还包含通常由内联接返回的所有行。

JOIN
是表示在删除操作中使用 SQL-92 式联接的关键字。
ON <search_condition>

指定联接所基于的条件。尽管经常使用列和比较运算符,但此条件可指定任何谓词,例如:

FROM Suppliers JOIN Procts
ON (Suppliers.SupplierID = Procts.SupplierID)

当条件指定列时,列不必具有相同的名称或数据类型;但是,如果数据类型不一致,则这些列必须相互兼容或是 Microsoft® SQL Server™ 能够隐性转换的类型。如果数据类型不能隐性转换,则条件必须使用 CAST 函数显式转换数据类型。

有关搜索条件和谓词的更多信息,请参见搜索条件。

CROSS JOIN

指定两个表的矢量积。这将返回相同的行,就好像在旧式的非 SQL-92 式联接中并没有指定 WHERE 子句。

WHERE

指定用于限制删除行数的条件。如果没有提供 WHERE 子句,则 DELETE 删除表中的所有行。基于 WHERE 子句中所指定的条件,有两种形式的删除操作。

搜索删除指定搜索条件限定删除的行。

定位删除使用 CURRENT OF 子句指定游标。删除操作在游标的当前位置发生。这比使用 WHERE search_condition 子句限定删除的行的搜索 DELETE 精确。如果搜索条件不唯一标识单行,则搜索 DELETE 删除多行。
<search_condition>
指定删除行的限定条件。对搜索条件中可以包含的谓词数量没有限制。有关更多信息,请参见搜索条件。

CURRENT OF
指定在指定游标的当前位置完成 DELETE。

GLOBAL
指定 cursor_name 指的是全局游标。

cursor_name
是从其中进行提取的打开游标的名称。当全局和局部游标都以 cursor_name 作为它们的名称存在时,如果指定 GLOBAL,则 cursor_name 引用全局游标,如果未指定 GLOBAL,则 cursor_name 引用局部游标。游标必须允许更新。

cursor_variable_name
是游标变量的名称。游标变量必须引用允许更新的游标。
OPTION (<query_hint> [,...n] )

是表示使用优化程序提示自定义 SQL Server 的语句处理的关键字。

{HASH | ORDER} GROUP
指定在查询的 GROUP BY 或 COMPUTE 子句中指定的聚合使用哈希或排列。

{MERGE | HASH | CONCAT} UNION
指定所有的 UNION 操作通过合并、哈希或串联 UNION 集合来完成。如果指定了不止一个 UNION 提示,查询优化器就会从这些指定的提示中选择开销最少的策略。

说明 如果还为 FROM 子句中的某对链接表指定了 <joint_hint>,则这个提示优先于 OPTION 子句中所指定的任何 <join_hint>。

FAST number_rows
指定对查询进行优化,以便快速检索第一个 number_rows(非负整数)。在第一个 number_rows 返回后,查询继续进行并生成完整的结果集。

FORCE ORDER
指定在查询优化过程中保持由查询语法表示的联接顺序。

MAXDOP number
只对指定了 sp_configure 的 max degree of parallelism 配置选项的查询替代该选项。当使用 MAXDOP 查询提示时,所有和 max degree of parallelism 配置选项一起使用的语义规则均适用。有关更多信息,请参见 max degree of parallelism 选项。

ROBUST PLAN
强制查询优化器尝试执行一个计划,该计划以性能为代价获得最大可能的行大小。如果不能使用这样的计划,查询优化器将返回错误而不是延迟对查询执行的错误检测。行可以包含可变长度列;SQL Server 允许将行大小定义为超过 SQL Server 处理能力的最大可能的大小。通常,应用程序存储实际大小在 SQL Server 处理能力范围内的行,而不管最大可能大小。如果 SQL Server 遇到过长的行,则返回执行错误。
KEEP PLAN

强制查询优化器对查询放宽估计的重新编译阈值。当对表中索引列的更改(更新、删除或插入)达到估计数目时查询会自动重新编译,该估计数目即为重新编译阈值。指定 KEEP PLAN 将确保当表有多个更新时不会频繁地对查询进行重新编译。

注释
如果所修改的对象是 table 变量,则 DELETE 可用在用户定义函数的正文中。

对于由四部分组成的表名(或视图名称),若其中的服务器名称使用的是 OPENDATASOURCE 函数,则该表名可以在表名能够出现的任何位置作为表源使用。

如果 DELETE 语句违反了触发器,或试图删除另一个有 FOREIGN KEY 约束的表内的数据所引用的行,则可能会失败。如果 DELETE 删除了多行,而在删除的行中有任何一行违反触发器或约束,则将取消该语句,返回错误且不删除任何行。

如果在对表或视图的 DELETE 操作上定义了 INSTEAD-OF 触发器,该触发器将执行 instead of DELETE 语句。SQL Server 的早期版本只支持 DELETE 上的 AFTER 触发器和其它修改语句。

当 DELETE 语句遇到在表达式评估过程中发生的算术错误(溢出、被零除或域错误)时,SQL Server 将处理这些错误,就好象 SET ARITHABORT 打开一样。将取消批处理中的其余部分并返回错误信息。

对远程表和本地及远程分区视图上的 DELETE 语句将忽略 SET ROWCOUNT 选项的设置。

如果要删除在表中的所有行,则 TRUNCATE TABLE 比 DELETE 快。DELETE 以物理方式一次删除一行,并在事务日志中记录每个删除的行。TRUNCATE TABLE 则释放所有与表关联的页。因此,TRUNCATE TABLE 比 DELETE 快且需要的事务日志空间更少。TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 相当,但是 TRUNCATE TABLE 不能用于由外键引用的表。DELETE 和 TRUNCATE TABLE 都使删除的行所占用的空间可用于存储新数据。

权限
默认情况下,将 DELETE 权限授予 sysadmin 固定服务器角色成员、db_owner 和 db_datawriter 固定数据库角色成员以及表所有者。sysadmin、db_owner 和 db_securityadmin 角色成员和表所有者可以将权限转让给其他用户。

如果语句包含 WHERE 子句,则还必须有 SELECT 权限。

示例
A. 不带参数使用 DELETE
下例从 authors表中删除所有行。

USE pubs
DELETE authors

B. 在行集上使用 DELETE
因为 au_lname 可能不是唯一的,下例删除其中的 au_lname 是 McBadden 的所有行。

USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'

C. 在游标的当前行上使用 DELETE
下例显示在名为 complex_join_cursor 的游标上所做的删除。它只影响当前从游标提取的单行。

USE pubs
DELETE FROM authors
WHERE CURRENT OF complex_join_cursor

D. 基于子查询使用 DELETE 或使用 Transact-SQL 扩展
下例显示基于联接或相关子查询从基表中删除记录的 Transact-SQL 扩展。第一个 DELETE 显示与 SQL-92 兼容的子查询解决方法,第二个 DELETE 显示 Transact-SQL 扩展。两个查询都基于存储在 titles 表中的标题从 titleauthors 表中删除行。

/* SQL-92-Standard subquery */
USE pubs
DELETE FROM titleauthor
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE title LIKE '%computers%')

/* Transact-SQL extension */
USE pubs
DELETE titleauthor
FROM titleauthor INNER JOIN titles
ON titleauthor.title_id = titles.title_id
WHERE titles.title LIKE '%computers%'

E. 在 DELETE 和 SELECT 中使用 TOP 子句
由于可以在 DELETE 语句中指定 SELECT 语句,因此还可以在 SELECT 语句中使用 TOP 子句。例如,下例从 authors 表中删除前 10 个作者。

DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id

⑵ 为什么SQL的部分数据删不掉呢显示未删除任何行

因为表中此条信息不是唯一的,表中存在多条相同信息造成的,如果想删除,可以设计表,在表中增加一列设为自增长列进行保存,然后再进行删除就可以了。

⑶ sql怎么删除一个表中的所有数据

删除表数据有两种方法:delete和truncate。具体语句如下:

一、RUNCATE TABLE name :

删除表中的所有行,而不记录单个行删除操作。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。

TRUNCATE TABLE 的语法:TRUNCATE TABLE name ,参数 name 是要截断的表的名称或要删除其全部行的表的名称。

二、Delete from tablename where 1=1

1、delete语法:

DELETE FROM 表名称 WHERE 列名称 = 值。

2、删除所有行:

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:DELETE FROM table_name。

(3)sql未删除任何行扩展阅读:

truncate和delete的共同点及区别:

1、 truncate和 delete只删除数据不删除表的结构(定义) 。

2、delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。

truncate是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。

3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 。truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。

4、速度,一般来说: truncate >delete 。

⑷ 删除数据时出错。提示,未删除任何行。试图删除行时发生问题。错误源:.net sqlclient data provider。

sql 错了,一般这样的 “错误信息:将截断字符串或二进制数据。语句已终止”,都是sql不对。 基本都是where 条件里边有错。

⑸ SQL删除数据库中的所有数据

Sql Server中清空所有数据表中的记录
清空所有数据表中的记录:
复制代码 代码如下:
exec sp_msforeachtable @Command1 ='truncate table ?'

删除所有数据表:
复制代码 代码如下:
exec sp_msforeachtable 'delete N''?'''

清空SQL Server数据库中所有表数据的方法(有约束的情况)
其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程。
也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录。
说道删除数据记录,往往马上会想到的是delete和truncate语句,但在遇到在两个或多个表之间存在约束的话,这两个语句可能都会失效,而且最要命的是这两个命令都只能一次操作一个表。那么真正遇到要删除SQL Server数据库中所有记录时,该怎么办呢?有两个选择:
1.按照先后顺序逐个删除,这个方法在表非常多的情况下显得很不现实,即便是表数量不多,但约束比较多时,你还是要花费大量的时间和精力去研究其间的约束关系,然后找出先删哪个表,再删哪个表,最后又删哪个表。
2.禁用所有约束,删除所有数据,最后再启用约束,这样就不用花时间和精力去研究什么约束了,只需要编写一个简单的存储过程就可以自动完成这个任务。
复制代码 代码如下:

CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO

从这两个选择中不难看出第二个选择是最简单有效的了,那么在使用第二个选择时,具体该怎么实施呢?
首先得编写代码循环检查所有的表,这里我推荐一个存储过程sp_MSForEachTable,因为在微软的官方文档中没有对这个存储过程有描述,很多开发人员也许都还未曾听说,所以你在互联网上搜索得到的解决办法大多很复杂,也许有的人会认为,既然没有官方文档,这个存储过程可能会不稳定,打心理上会排斥它,但事实并非如此。下面来先看一个完整的脚本
这个脚本创建了一个命名为sp_DeleteAllData的存储过程,前面两行语句分别禁用约束和触发器,第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器,最后一条语句是显示每个表中的记录,当然这条语句也可以不要,我只是想确认一下是否清空了所有表而已。
你可以在任何数据库上运行这个存储过程,当然不要在生成数据库上运行,可别怪我没告诉你!不管怎样,还是先备份一下数据库,使用备份数据库还原,然后再运行该存储过程,呵呵,即使是一个大型数据库,也要不多长时间,你的数据库就成一个空库了

第三种方法:TRUNCATE TABLE

在sql server数据库中快速删除记录,清空表若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是,TRUNCATE TABLE 速度更快,并且使用更少的系统资源和事务日志资源。

与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:

所用的事务日志空间较少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。

使用的锁通常较少。

当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。

如无例外,在表中不会留有任何页。

执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义与其索引和其他关联对象一起保留在数据库中。

⑹ 求助sql 未删除任何行 不能使改行成为唯一行

问题出在你的sql server数据库的表中有重复的记录
你现在使用sql的管理工具删除重复记录中的一条,这样的话,管理工具生成删除sql语句的时候,不知道你要删除那一条,所以报这个错误。
方法是你在你的表中建立一个唯一的字段,可以说自增的主键,然后再删除

⑺ SQL Server 与应用程序对象的连接失败,请确保未删除任何程序模块。

开始-运行对话框输入:mmc 调出控制台

控制台 -- 文件 -- 添加 / 删除管理单元 -- 添加 -- 找到 MicrosoftSQL 企业管理器 -- 添加 -- 关闭 -- 确定

回到控制台

下一步,控制台 -- 文件 -- 选项 -- 控制台模式选择“用户模式完全访问”-- 将下面的选项打对勾的全部去掉,然后再:控制台 -- 另存为 -- 存储为:C:\ProgramFiles\MicrosoftSQLServer\80\Tools\BINN\SQLServerEnterpriseManager.MSC

如果还不行的话,请继续
重启企业管理器
程序注册控件

开始 -- 运行中输入 regsvr32 semsfc.dll /s

完成!

⑻ 数据库提示 未更新任何行,请问是什么问题,怎么办

1、首先打开运行界面,在输入框中输入CMD命令

⑼ 为什么SQL中不能无法删除普通的一列呢没有设任何约束,我用SQL server2005

删除列要加关键字column
alter table Student drop column 列名
alter table语句默认添加的是列,删除的则是约束
alter table Student drop 约束名,这样是正确的

⑽ SQL Server修改表的时候出现错误:未更新任何行

当对sql数据库中的表进行编辑时,会出现“未更新任何行”的错误,这是可能是因为插入了一条与之前相同的记录或者不满足某种约束类型,这时数据库当然不能更新任何行了。

此时应该检查一下是否输入了错误的数据,并与之前已输入的数据记录进行比较,确定正确之后再录入数据。若仍有“未更新任何行”的错误并且保存不了这个表,也退不出去,这时就需要用sql语句来删除已录入的错误数据。

(10)sql未删除任何行扩展阅读

Sql 修改表结构的操作

1、添加表字段

alter table 表名 add 字段名 类型(值)

示例:alter table user add name varchar(40);

2、删除表字段

alter table 表名 drop 字段名

示例: alter table user drop name;

3、字段名更名

alter table 表名 rename 老字段名 to 新字段名

示例:alter table user rename oldname to newname;

4、更改字段类型

alter table 表名 alter 字段 类型;

示例:alter table user alter name varchar(50);