ms-sql server在删除数据怎样不写日志?

langtian 2003-01-11 10:59:21
ms-sql server在删除数据怎样不写日志?
...全文
540 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizongqi 2003-01-11
  • 打赏
  • 举报
回复
嘻嘻
pengdali 2003-01-11
  • 打赏
  • 举报
回复
TRUNCATE TABLE 表名
CoolAbu 2003-01-11
  • 打赏
  • 举报
回复
用truncate table tablename删除数据时,不记入日志。
pengdali 2003-01-11
  • 打赏
  • 举报
回复
TRUNCATE TABLE
删除表中的所有行,而不记录单个行删除操作。

语法
TRUNCATE TABLE name

参数
name

是要截断的表的名称或要删除其全部行的表的名称。

注释
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

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

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

TRUNCATE TABLE 不能用于参与了索引视图的表。

示例
下例删除 authors 表中的所有数据。

TRUNCATE TABLE authors

权限
TRUNCATE TABLE 权限默认授予表所有者、sysadmin 固定服务器角色成员、db_owner 和 db_ddladmin 固定数据库角色成员且不可转让。
langtian 2003-01-11
  • 打赏
  • 举报
回复
呵呵,谢谢各位的热心回答;
但是我的意思是带where条件的删除。
几天前在盒子看到绿色Sql server很高兴,现将本人对绿色SQL Server的现实思路作一说明,不正确的地方还请指教。1. Sqlservr.exe 运行参数。 Sql Server的启动可以为Windows服务方式(默认),也可以以应用程序方式启动。下面介绍sqlservr.exe以应用程序方式启动时的参数问题。sqlservr 应用程序用法:sqlservr [-sinstance_name] [-c] [-dmaster_path] [-f] [-eerror_log_path] [-lmaster_log_path] [-m] [-n] [-Ttrace#] [-v] [-x] [-g number] [-O] [-y number]-sinstance_name 指定要连接到的 SQL Server 实例。如果未指定命名实例,sqlservr 将启动 SQL Server 默认实例。重要 启动 SQL Server 实例时,必须从实例所在的适当目录使用 sqlservr 应用程序。对于默认实例,从 MSSQLBinn 目录运行 sqlservr。对于命名实例,在 MSSQL$instance_nameBinn 目录运行 sqlservr。-c 表示以独立于 Windows NT 服务控制管理器的方式启动 SQL Server 实例。当从命令提示符下启动 SQLServer 时,可使用该选项缩短启动 SQL Server 的时间。(注意:当使用该选项时,无法通过使用 SQLServer 服务管理器或 net stop 命令停止 SQL Server,而且如果已从 Microsoft Windows NT? 系统注销,则 SQL Server 将停止运行。)-dmaster_path指出 master 数据库文件的完全合法路径。在 -d 和 master_path 之间没有空格。-f以最小配置模式启动服务器。然后,系统管理员可对配置选项重新配置(使用 sp_configure 系统存储过程)。-eerror_log_path表示错误日志文件的完全合法路径。如果未指定路径,则默认实例的默认位置是 x:Program FilesMicrosoft SQL ServerMSSQLLogErrorlog,命名实例的默认位置是 x:Program FilesMicrosoft SQL ServerMSSQL$instance_nameLogErrorlog。在 -e 和 error_log_path 之间没有空格。-lmaster_log_path指示 master 数据库事务日志文件的完全合法路径。在 -l 和 master_log_path 之间没有空格。-m表示在单用户模式下启动 SQL Server 实例。如果 SQL Server 是以单用户模式启动的,则只能连接一个用户。CHECKPOINT 机制(它确保完成的事务定期从磁盘高速缓存写入数据库设备中)将不启动。(一般情况下,如果您遇到需要修复的系统数据库问题时,可使用此选项。)-n表示您不想使用 Windows NT 应用程序日志来记录 SQL Server 事件。如果用 -n 选项启动 SQL Server 实例,则最好也使用 -e 选项,否则将不会记录 SQL Server 事件。-Ttrace#表示应使用指定的有效跟踪标记 (trace#) 来启动 SQL Server 实例。跟踪标志用来启动具有非标准行为的服务器。有关可用跟踪标记 (trace#) 的更多信息,请参见跟踪标记。重要 当指定跟踪标志时,请使用 –T 来传递跟踪标志号。SQL Server 接受小写字母 t (-t);然而,-t 还设置 SQL Server 支持工程师所需的其它内部跟踪标记。-v显示服务器的版本号。-x禁用维护 CPU 统计。-g memory_to_reserve指定内存的兆字节整数,该内存被保留下来用于 SQL Server 2000 内部(进程内)运行的其它应用程序。-O指定不需要分布式 COM (DCOM),从而禁用异类查询。-y error_number如果 SQL Server 2000 遇到在该选项中指定的错误信息,它将把表象堆栈跟踪写入错误日志。可以使用多个 –y 参数指定多个错误。2. 系统数据库路径问题. 一般情况下,正常安装sql server之后,master等系统数据库的路径都是被设置为绝对路径,如果要改正数据库的路径为相对路径,可以使用以下SQl语句: sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ', ['...data'+extractfilename(MDFFile),MDFFile]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL; sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ', ['...data'+extractfilename(LogFile),LogFile]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL; sql:=Format('update sysdatabases set filename='%s' where name='%s'', ['...data'+extractfilename(MDFFile),Edit1.text]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL;大家打开sysaltfiles 表和sysdatabases 一看就知道了,不多说了。除了系统数据库,其它的数据库也可以使用这种方法修改为相对路径。 使用相对路径的好处是可以让你的绿色Sql server随时copy到任意目录或是任意其它机器上启动,并且原来的数据库全部可以使用,如果是绝对路径到了其它机器就不行了。3. 注册表问题: 大家可以看下面的注册表文件Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$name][HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServer]"AuditLevel"=dword:00000000"DefaultLogin"="guest""ListenOn"=hex(7):53,00,53,00,4d,00,53,00,53,00,48,00,37,00,30,00,00,00,53,00, 53,00,4e,00,45,00,54,00,4c,00,49,00,42,00,00,00,00,00"LoginMode"=dword:00000000"Map_"="""Map#"="-""Map$"="""SetHostName"=dword:00000000"Tapeloadwaittime"=dword:ffffffff"uptime_pid"=dword:00001044"uptime_time_utc"=hex:26,57,c8,b3,fb,bb,c5,01[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerCurrentVersion]"CurrentVersion"="8.00.194""RegisteredOwner"="""SerialNumber"="""CSDVersionNumber"=dword:00000300"CSDVersion"="8.00.761""Language"=dword:00000804"checksum"=hex:37,35,32,32,63,31,35,38,61,65,37,64,34,63,64,37,35,30,64,61,30, 33,34,62,37,64,63,32,30,61,36,36,39,37,62,34,61,35,65,36,63,66,62,61,38,37, 39,36,37,31,66,33,39,61,36,65,35,64,30,33,37,36,37,65,64,36,33,30,61,39,63, 36,66,37,36,30,35,65,32,66,34,66,31,33,63,39,33,63,34,66,62,66,34,66,64,38, 64,65,36,64,35,34,37,33,35,39,35,32,36,63,61,32,36,63,33,32,64,34,36,33,65, 36,39,34,30,65,61,37,64,35,30,61,66,34,64,32,66,38,37,36,30,61,39,64,30,61, 32,36,64,65,66,66,00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerParameters][HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLib]"ProtocolList"=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibNp]"PipeName"="\.pipeMSSQL$$namesqlquery"[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibTcp]"TcpHideFlag"=dword:00000000"TcpDynamicPorts"="$port""TcpPort"="$port"[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameSetup]"FeatureName"="SqlRun""FirstStart"=dword:00000000"ProductCode"="{E09B48B5-E141-427A-AB0C-D3605127224A}""SQLDataRoot"="$path""SQLPath"="$path"这是注册一个Sql Server实例所要使用的注册表,把里面的$name,$path,$port替换成你定义的实例名,当前程序所有路径,监听端口,然后导入注册表就可以了。4. 启动Sql Server iPath:=ExtractFilePath(Application.ExeName); CommandLine:=PChar(iPath+'binnsqlservr.exe -d...datamaster.mdf -l...datamastlog.ldf -e...Loglog.txt+Edit1.Text); CreateProcess( nil, CommandLine, nil, nil, true, CREATE_NO_WINDOW, nil, PChar(iPath+'binn'), StartupInfo, ProcessInformation )也可以直接写个.bat运行就ok了.5. 启动日志问题。 这个问题最简单,因为在执行sqlservr.exe时指定的有log文件,你只用用个定时器(50ms)读文件,就可以在程序中显示出来启动日志了,呵呵,这只是个思想,具体的自已想办法吧. 6. 停止服务 用CreateProcess可以得到进程ID,TerminateProcess就关了sql server进程,服务就停了,简单吧。根据上面的6个步骤,你就可以自已搞定一个绿色的Sql Server了.并且你可以根据不同的sql server版本,整理出所有版本的绿色sql server。绿色 sql server 企业版绿色 sql server 个人版绿色 MSDE... ...这样以后遇到什么操作系统都全部搞定。 最后说一句,只要你能把几个Sql server版本的数据整理好(主要是系统数据库的路径问题(好像现在盒子已经有绿色企业版的文件了),DLL全部copy就OK了),都可以使用我的管理工具进行管理,呵呵,当然你也可以作出自已的管理器。我的管理器,主要是为了我自已用,大家如果用着可以,请多提意见。由于sql server数据太大,并且盒子上已经有了,这次只上传了exe和目录结构。不知道说的是否正确,如果还有什么问题,我们一起交流. Email: 11826088@163.com

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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