存储过程和自定义函数的区别? 存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。而自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。 存储过程,可以使用非确定函数。自定义数,不允许在用户定义函数主体中内置非确定函数。 存储过程,可返回记录集。自定义函数,可以返回表变量,也可以有任意个输出参数。 存储过程,其返回值不能被直接引用,必须单独调用。自定义函数,其返回值可以被直接引用,也就是可以直接 select * from 函数。
一个表中的 Id 有多个记录,把所有这个 id 的记录查出来,并显示共有多少条记录数。select id, Count(*) from tb group by id having count(*)>1 select * from(select count(ID) as count from table group by ID)T where T.count>1
为什么 group by 和 order by 会使查询变慢? group by 和 order by 操作通常需要创建一个临时表来处理查询的结果,所以如果查询结果很多的话会严重影响性能
delete、truncate 和 drop 的区别? Delete 命令用来删除表的全部或者一部分数据行,执行 delete 之后,用户需要提交(commit)或者回滚(rollback) transaction 来执行删除或者撤销删除,delete 命令会触发这个表上所有的 delete触发器。 Truncate 删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,truncate 比 delete更快,占用的空间更小。 Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的 DML 触发器也不会被触发,这个命令也不能回滚。