1. 类型转换方法1:Convert(目标类型,待转换的字段,格式)
2. 类型转换方法2:Cast(待转换的字段 as 目标类型)
3. 日期增加:DateAdd(日期的年/月/日...,增加的数值,日期字段)
4. 日期减少:DateDiff(日期的年/月/日...,开始日期字段,结束日期字段)
5. 取出日期的年/月/日...:DatePart(年/月/日...,日期字段)
6. 将字符串转成大写:Upper(待转换字段)
7. 将字符串转成小写:Lower(待转换字段)
8. 将字符转成Ascii码:Ascii(待转换字段)
9. 从左侧截取多个字符:Left(待截取字段,截取字符数)
10. 从右侧截取多个字符:Right(待截取字段,截取字符数)
11. 获取当前数据占用的内存大小:DataLength(待计算字段)
12. 去掉左右不可打印字符:Trim(待操作字段)
13. 去掉左侧不可打印字符:LTrim(待操作字段)
14. 去掉右侧不可打印字符:RTrim(待操作字段)
SelectTop 2CallerNumberSum(DateDiff(Second,startdatetime,enddataetime)) As 时长,Count(*) As 电话数
FromCallRecords
WhereDateDiff(Month,'2010-7-1',startdatetime)=0
Group ByCallerNumber
Order By时长
Desc
CallerNumber | 时长 | 电话数 |
---|---|---|
001 | 1153 | 4 |
003 | 340 | 2 |
防止Sql注入:
1. SqlCommand对象的CommandText字符串参数化:Select count(*) From UserInfo Where UserName=@UserName And UserPwd=@UserPwd;
2. 给SqlCommand对象的对应参数赋值:
sqlCommand.Parameters.AddWithValue("@UserName",值);
sqlCommand.Patameters.AddWithValue("@UserPwd",值)
在Select显示列时做多项选择显示:
Select*,Case DelFlagWhen 0 Then N'未删除'When 1 Then N'删除'End As 删除状态,UserName
FromUserInfo
在Select显示列时做Null值替换:
SelectCreateDate,IsNull(CreateDate,GetDate())
FromUserInfo
给Sql脚本定义变量,赋值,输出
Declare @i int
Set@i=9
Print@i
Sql进行if判断:
Declare@num int
Set@num=SelectCount(1)FromUserInfoWhereUserAge<40
Print @num
If(@num>3)BeginPrint N'年轻'End
ElseBeginPrint N'不年轻'End
Sql进行While循环:
Declare@i int
Set@i=0
While(@i<=100)BeginPrint@iSet@i=@i+1End
第一种子查询作为表来使用:
SelectT.*
From(SelectUserIdFromUserInfoWhereUserAge>50) As T
WhereT.UserId<5
第二种子查询作为表达式来使用:
Select*
FromUserInfo
WhereUserAge<(SelectAvg(UserAge)FromUserInfo)
第一种双Top分页查询:
SelectTop 3 *
FromUserInfo
WhereUserId Not In(SelectTop ((2-1)*3) UserIdFromUserInfoOrder ByUserId)
Order ByUserId
第二种外包开窗函数分页查询:
Select*
From(Select*,Row_Number() Over(Order By UserId) As numFromUserInfo) As T
WhereT.num
Between 4 And 6
开窗函数可以使得表与聚合后的结果一同显示,聚合结果值会被添加到每条数据的末尾:
Select*,Avg(UserAge) Over()
FromUserInfo
创建局部临时表,自定义字段: Create Table #临时表名(字段1,字段2,......)
创建局部临时表,复制已有表: Select * Into #临时表名 From 原表名
创建全局临时表,自定义字段: Create Table #全局临时表名(字段1,字段2,......)
创建全局临时表,复制已有表: Select * Into #全局临时表名 From 原表名
异常捕获的语法:
Begin Try--Sql语句
End Try
Begin Catch--Sql语句
End Catch
创建存储过程:
--查看数据库中是否已经存在该存储过程对象
If
(Exists(Select*Fromsys.all_objectsWherename='存储过程名')
)--存在则删除BeginDrop Proc 存储过程名End
Else--不存在则忽略BeginEnd
Go--创建存储过程
Create Proc 存储过程名
--定义字段
@PageSize int,
@PageIndex int,
@TotalCount int OutPut
--存储过程需要执行的Sql语句
As
Select*
From
(Select*,Row_Number() Over(Order By UserId asc) As RowNumFromUserInfo
) As T
WhereT.RowNum
Between((@PageIndex-1)*@PageSize+1)
And(@PageSize*@PageIndex)
Set@TotalCount=SelectCount(1)FromUserInfo--定义变量,用来接收存储过程输出的结果
Declare@Total int
--执行存储过程并传递参数
ExecPro_UserInfo_存储过程名 2,4,@Total Out
--打印结果进行验证
Print @Total
查看数据库列表:Exec sp_databases
查看表:Exec sp_tables
查看表中的字段:Eexc sp_columns 表名
动态执行Sql脚本的方法:
--定义用来存储Sql语句的变量
Declare@strSql nvarchar(max)
--设置Sql语句变量的内容
Set@strSql='Select * From UserInfo'
--把Sql语句变量内容当作Sql语句执行
Exec (@strSql)
--或者直接用Exec执行Sql语句
Exec ('Select * From UserInfo')
使用自定义函数:
--创建一个自定义的方法
Create Function Fun_GetUser(@UserAge int)
//定义返回值的类型
Returns int
As
Begin//定义用来返回数据的变量Declare@result int//将Sql执行结果赋值给返回数据的变量Set@result=SelectCount(1)FromUserInfoWhereUserAge>@UserAge//返回结果数据Return@result
End//调用自定义的方法
Selectdbo.Fun_GetUser(40)
执行插入操作,如何返回数据:
--能够返回Inserted池,或者,Deleted池中的特殊字段数据
Insert Into表名(字段1,字段2,.....)OutPut Inserted.Id或者Deleted.Id或者Inserted.Name或者Deleted.Name或者......
Values(值1,值2,......)
触发器:
Create Trigger触发器名
On表名
For Insert或者Update或者Delete
As
BeginDeclare@Id intSet@Id=SelectIdFromInserted--这里写触发器触发执行的Sql语句
End
通过Sql语句将某权限授予某用户:
--例子
Grant Select On Table 表名 To 用户名--操作权限:对象 对象类型 操作权限
--属性列 Table Select,Insert,Update,Delete,All Privileges
--视图 Table Select,Insert,Update,Delete,All Privileges
--基本表 Table Select,Insert,Update,Delete,Alter,Index,All Privileges
--数据库 DataBase Create Table,Alter Table