Sql FAQ

1.查询结果根据条件翻译成其他值

select SNAME,FENSHU=case when FENSHU>=90 then '优秀' when FENSHU>=80 then '良好'when FENSHU>=60 then '及格' else '不及格' end 
from S_STUDENT
select SNAME,FENSHU=case FENSHU when 90 then '优秀' when 80 then '良好' when 60 then '及格' else '不及格' end 
from S_STUDENT

 2.sql 动态组合查询条件 where 1=1 效率

一般不会影响效率,会自动优化

当然也可替换:

bool hasWhere = false; 
StringBuilder strSql = new StringBuilder();
 strSql.Append("select * FROM dt_users_log  ");
        if (txtUserID.Text.Trim() != string.Empty)
        {
            hasWhere = AppendWhere(strSql, hasWhere);
            strSql.Append("user_name=@user_id ");
        }
        if (DatePicker1.Text.Trim() != string.Empty && DatePicker2.Text.Trim() != string.Empty)
        {
            hasWhere = AppendWhere(strSql, hasWhere);
            strSql.Append("login_time between @start_time and @end_time ");
        }

private bool AppendWhere(StringBuilder sb, bool hasWhere)
    {
        if (!hasWhere)
        {
            hasWhere = true;
            sb.Append("where ");
            return hasWhere;
        }
        else
        {
            hasWhere = false;
            sb.Append("and ");
            return hasWhere;
        }
    }

 3.批量插入

declare @startTime datetime
declare @idx int
set @idx = 1
set @startTime = GETDATE()
 
while @idx  < 18
begin
    insert into TTest01(c1, c2, C3) select C1,C2,c3  from TTest01
    set @idx = @idx + 1
end
print datediff(ms, @startTime, GETDATE())

 4.清理日志 收缩mdf ldf 文件

sql server 2005、2008清理数据库日志

USE 数据库名
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
ALTER DATABASE 数据库名 SET RECOVERY FULL
DBCC SHRINKDATABASE(数据库名,0)
这个查询语句可以随时执行,不影响数据库的运行。
清理ldf的操作可以使用sql server代理,每天自动执行一次,就不怕文件增长撑爆硬盘了。
一般mdf用不着收缩,收缩多了容易产生文件碎片,因为delete数据之后,mdf文件中可用页面空间会保留在那里,等下次有新数据进来时,会继续使用。如果实在要清理,可以参考下面的语句:
sql server 2000、2005、2008 收缩mdf文件
DBCC SHRINKDATABASE(数据库名)
DBCC SHRINKFILE(1,0)
DBCC UPDATEUSAGE(0)
执行上述操作后,你会发现mdf的文件减少了,ldf的文件增大了,再用上面1的日志清理操作一次即可。
原文地址:https://www.cnblogs.com/LifeKingcn/p/3481563.html