truncate执行不成功 请教一个问题,我在删除某表数据的时候,执行truncate table tbl,就一直在执行中,始终执行不了。执行delete from tbl,由于表tbl只有700多行数据,一下子就删除成功。请问这是什么原因呢?(这张表被引用于视图中。) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参与索引视图的表,不可以用truncate。 不能对以下表使用 TRUNCATE TABLE: 由 FOREIGN KEY 约束引用的表。参与索引视图的表。通过使用事务复制或合并复制发布的表。对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除 SQL Server 2005 联机丛书 TRUNCATE TABLE (Transact-SQL) 发送反馈 请参阅 全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript Visual Basic(Declaration) C# C++ J# JScript删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 在功能上与没有 WHERE 子句的 DELETE 语句相同;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。 Transact-SQL 语法约定语法 TRUNCATE TABLE [ { database_name.[ schema_name ]. | schema_name . } ] table_name[ ; ] 备注与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:所用的事务日志空间较少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个条目。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。 使用的锁通常较少。当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。 表中将毫无例外地不留下任何页。执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使用 DROP TABLE 语句。 如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。 限制不能对以下表使用 TRUNCATE TABLE: 由 FOREIGN KEY 约束引用的表。参与索引视图的表。通过使用事务复制或合并复制发布的表。对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。截断大型表Microsoft SQL Server 2005 能够删除或截断有 128 个以上的区的表,而不必对需要删除的所有区保持同时锁定。有关详细信息,请参阅删除并重新生成大型对象。参数database_name 数据库的名称。schema_name 表所属架构的名称。table_name 要截断的表的名称,或要删除其全部行的表的名称。权限所需的最低权限是对 table_name 的 ALTER 权限。TRUNCATE TABLE 权限默认授予表所有者、sysadmin 固定服务器角色的成员、db_owner 和 db_ddladmin 固定数据库角色的成员,并且不可转移权限。但是,可以在诸如存储过程这样的模块中加入 TRUNCATE TABLE 语句,然后为使用 EXECUTE AS 子句的模块授予适当的权限。有关详细信息,请参阅使用 EXECUTE AS 创建自定义权限集。示例以下示例删除 JobCandidate 表中的所有数据。SELECT 语句放在 TRUNCATE TABLE 语句之前和之后以比较结果。 复制代码 USE AdventureWorks;GOSELECT COUNT(*) AS BeforeTruncateCount FROM HumanResources.JobCandidate;GOTRUNCATE TABLE HumanResources.JobCandidate;GOSELECT COUNT(*) AS AfterTruncateCount FROM HumanResources.JobCandidate;GO 请参阅参考DELETE (Transact-SQL)DROP TABLE (Transact-SQL)IDENTITY(属性)(Transact-SQL) 限制不能对以下表使用 TRUNCATE TABLE: 由 FOREIGN KEY 约束引用的表。参与索引视图的表。通过使用事务复制或合并复制发布的表。对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。联机帮助文档。 表如果有外键时不能用truncate 够倒每的,SQL2005程序菜单中的企业管理器不能用了... sql执行的问题 sql问题请教 数据库备份和恢复的问题 sql有没有办法将多表联查的列头名称提取出来? 求一sql语句 版本不限,在线等,请高手们指点 小问题 为什么没有人回答关于2005“数据库邮件”功能乱吗的问题啊,邹老大也不知道跑哪里去了 如何做一个 列值累计的查询 如何记录表中的某行数据被查询到? 循环一张表中不同类型的数据 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 搜索功能用不了,特发此贴询问一SQL(继续)
参与索引视图的表。
通过使用事务复制或合并复制发布的表。
对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除
SQL Server 2005 联机丛书
TRUNCATE TABLE (Transact-SQL) 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript
Visual Basic(Declaration)
C#
C++
J#
JScript删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 在功能上与没有 WHERE 子句的 DELETE 语句相同;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。 Transact-SQL 语法约定语法
TRUNCATE TABLE
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
备注
与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:所用的事务日志空间较少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个条目。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。
使用的锁通常较少。当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。
表中将毫无例外地不留下任何页。执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使用 DROP TABLE 语句。 如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。 限制
不能对以下表使用 TRUNCATE TABLE: 由 FOREIGN KEY 约束引用的表。
参与索引视图的表。
通过使用事务复制或合并复制发布的表。
对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。截断大型表
Microsoft SQL Server 2005 能够删除或截断有 128 个以上的区的表,而不必对需要删除的所有区保持同时锁定。有关详细信息,请参阅删除并重新生成大型对象。参数
database_name 数据库的名称。schema_name 表所属架构的名称。table_name 要截断的表的名称,或要删除其全部行的表的名称。权限
所需的最低权限是对 table_name 的 ALTER 权限。TRUNCATE TABLE 权限默认授予表所有者、sysadmin 固定服务器角色的成员、db_owner 和 db_ddladmin 固定数据库角色的成员,并且不可转移权限。但是,可以在诸如存储过程这样的模块中加入 TRUNCATE TABLE 语句,然后为使用 EXECUTE AS 子句的模块授予适当的权限。有关详细信息,请参阅使用 EXECUTE AS 创建自定义权限集。示例
以下示例删除 JobCandidate 表中的所有数据。SELECT 语句放在 TRUNCATE TABLE 语句之前和之后以比较结果。 复制代码
USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
GO
请参阅
参考
DELETE (Transact-SQL)
DROP TABLE (Transact-SQL)
IDENTITY(属性)(Transact-SQL)
限制
不能对以下表使用 TRUNCATE TABLE: 由 FOREIGN KEY 约束引用的表。
参与索引视图的表。
通过使用事务复制或合并复制发布的表。
对于具有以上一个或多个特征的表,请使用 DELETE 语句。TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。
联机帮助文档。