常用Sql
1、case 函数:
--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
备注:简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
2、.Net中调用存储过程:
CommandText等于存储过程名, 参数通过SqlParameter传入;CommandType等于CommandType.StoredProcedure
判断存储过程是否存在:
exists (select * from sys.objects where type='P' and name='SelectStudent')
3、声明变量:
declare @name varchar(20) ,age int;
4、变量赋值:
set @name='lxf'
set @age=30 貌似不支持一次给多个变量赋值: set @name='lxf',@age=25 报错
但下面这中是可以的
declare @nn varchar(20),@cc int
select @nn=name , @cc=age
from student where ID=1
select @nn 姓名 ,@cc 年龄
4、
MERGE 目标表
USING 源表
ON 匹配条件
WHEN MATCHED THEN
语句
WHEN NOT MATCHED THEN
语句;
详见:http://www.cnblogs.com/xfrog/archive/2010/10/13/1850602.html
5.exec(或execute)用法:
最常用法,就是用来调用存储过程: exec procName 参数列表
还有种用法:执行动态sql,如
DECLARE @ss NVARCHAR(max)
DECLARE @idd VARCHAR(10)
SET @idd=12
SET @ss=N'select * from student where id='+ @idd
EXEC (@ss )
(备注:sql中可以有变量 但使用变量值时必须通过拼接sql)
还有种执行动态sql的方法是调用系统存储过程:sp_executesql
如
declare @sql nvarchar(2000)
declare @cou int
declare @id varchar(20)
set @id='1'
set @sql='select @count=count(*) from emp where id=@id'
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out
,@id
print @cou
注意:
1.sp_executesql要求动态Sql和动态Sql参数列表必须是Nvarchar,比如上个例子的@sql,N'@count int out,@id varchar(20)'我记得在sql2005中Varchar也可以的,但是我打了Sp3补丁后就不行了,必须为Nvarchar
2.动态Sql的参数列表与外部提供值的参数列表顺序必需一致,如:
N'@count int out,@id varchar(20)', @cou out,@id
@count 对应 @cou,@id对应@id
如果不一致,必须显式标明,如:
N'@count int out,@id varchar(20)', @id=@id, @count=@cou out
3.动态SQl的参数列表与外部提供参数的参数列表参数名可以同名
6、获取当前时间的日期部分:
SELECT CONVERT(VARCHAR(10),GETDATE(),120 )
其它格式详见http://www.w3school.com.cn/sql/func_convert.asp
7、 SELECT @@RowCount
返回上一执行的sql语句所影响的行数或查询的条数。
8、CHARINDEX ( expression1 , expression2 [ , start_location ] )
expression1 要找的字符(串) , expression2 查下目标对象,start_location 是 CHARINDEX 函数开始在 expression2 中找expression1 的位置。
找到返回索引 从1开始 未找到返回0.、
9、CAST (expression AS data_type) 将变量expression 转换为指定类型
10、日期相加减:SQL Server 日期的加减函数: DATEDIFF DATEADD
11、获取当月第一天和最后一天的日期
declare @Now DATEtime ;
DECLARE @FirstDayOfThisMonth DATE
declare @LastDayOfThisMonth DATE
SET @Now = GETDATE()
SET @FirstDayOfThisMonth = @Now - day(@Now) + 1
SET @LastDayOfThisMonth = DATEADD(MONTH,1,@Now-Day(@Now)+1) - 1
SELECT @Now
select @FirstDayOfThisMonth
select @LastDayOfThisMonth