SQL技巧:删除重复记录与事务日志收缩

0 下载量 104 浏览量 更新于2024-08-30 收藏 58KB PDF 举报
"这篇文档提供了一些实用的SQL语句,主要涉及如何删除数据库表中的重复记录以及如何收缩事务日志。此外,还分享了几个日期时间相关的转换函数和CASE语句的使用示例。" 在SQL操作中,处理重复记录是一项常见的任务。文档中给出的方法是通过创建一个临时表来保留不重复的记录。首先,使用`SELECT DISTINCT * INTO #table_name FROM table_name`语句将原始表`table_name`中的所有不重复行插入到名为`#table_name`的临时表中。接着,删除原始表的所有记录`DELETE FROM table_name`,然后将临时表中的不重复数据重新写入到`table_name`中,最后删除临时表`DROP TABLE #table_name`。这个过程确保了`table_name`中只包含唯一记录。 关于“select into”选项,这是SQL Server中的一项特性,允许在创建新表时直接从查询结果中选择数据。默认情况下,这个选项可能是关闭的。要启用它,可以在数据库属性对话框中设置,或者在查询分析器中执行`EXEC sp_dboption 'db_name', 'select into', 'true'`命令,其中`db_name`应替换为你的数据库名。 另外,文档还提到了收缩事务日志的步骤。事务日志用于跟踪数据库的所有更改,有时可能需要对其进行收缩以节省存储空间。可以通过执行以下两条备份语句和一个DBCC命令来实现: 1. `BACKUP LOG register WITH NO_LOG`:这是一次逻辑备份,但不保留日志,这样可以释放日志空间但不删除日志。 2. `BACKUP LOG register WITH TRUNCATE_ONLY`:此命令会清除事务日志,但不会备份,仅在日志文件已满时使用。 3. `DBCC SHRINKDATABASE (register)`:这个命令将收缩指定数据库`register`的大小,包括其日志文件。 此外,文档还分享了一些SQL日期时间函数的使用例子,如: - 获取当前时间(时/分/秒):`SELECT CONVERT(varchar(10), GETDATE(), 8)` - 获取当前年月日:`SELECT CONVERT(varchar(10), GETDATE(), 120)` - 获取当前年月:`SELECT CONVERT(varchar(7), GETDATE(), 120)` - 获取当前年份和月份:`SELECT CONVERT(varchar(10), YEAR(GETDATE())) + '-' + CONVERT(varchar(10), MONTH(GETDATE()))` - 将字符串转换为整数:`SELECT CAST(b AS integer) AS bb FROM table1 WHERE b = '11'` - 使用CASE语句进行条件转换:`SELECT a, CASE b WHEN '11' THEN '细细' WHEN '22' THEN '呵呵' ELSE '哈哈' END AS 转换, c FROM table1` - 另一种CASE语句的写法:`SELECT a, b, CASE WHEN c = '111' THEN '细细' WHEN c = '222' THEN '呵呵' ELSE '哈哈' END AS 转换1 FROM table1` 这些函数和语句在日常数据库管理或数据处理中非常有用,可以帮助你更有效地操作和查询数据。