1.NULL的用法__2018-4-13
- ISNULL()的用法
- 注意SET ANSI_NULLS ON/OFF的区别;
- 执行下面两句比较结果:
SELECT location,*FROM mfsysproduct WHERE location IS NULL; SELECT location,*FROM mfsysproduct WHERE location = ‘‘; SELECT location,* FROM mfsysproduct where location !=‘‘; SELECT location,* FROM mfsysproduct WHERE ISNULL(location,‘‘)!=‘‘;
2.GROUP BY & HAVING
SELECT nextevent,COUNT(1) FROM mfworkstatus WHERE workorderno NOT IN
(SELECT workorderno FROM mfworkorder) GROUP BY nextevent;
SELECT nextevent,COUNT(1) FROM mfworkstatus WHERE workorderno NOT IN
(SELECT workorderno FROM mfworkorder) GROUP BY nextevent HAVING COUNT(*)>100
3.SET QUOTED_IDENTIFIER off/on的区别
SET QUOTED_IDENTIFIER ON
SELECT * FROM "USER" WHERE a=‘netasp‘
SET QUOTED_IDENTIFIER ON
SELECT * FROM [USER] WHERE a=‘netasp‘
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE a="netasp" s
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE a= ‘netasp‘
当在数据库中新建一个名字是USER的表的时候,常常会带来一些麻烦,因为USER是SQL中的关键字,
但是上面的几个语句不会报错。再说一个概念:标示符是SQL中的中括号[]。
当SET QUOTED_IDENTIFIER值为ON时,双引号内的字符被当作是数据库对象。
就是说双引号""和标识符[]效果是一样样的,他们都表示引用的字符是数据库对象。单引号‘表示字符串的边界。
当SET QUOTDE_IDENTIFIER OFF时双引号被解释为字符串的边界,和单引号的作用是类似的。
就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号‘的效果是一样样的。
可以做一个总结:当SET QUOTED_IDENTIFIER ON " "等同于[ ] 表示数据库对象;
当SET QUOTED_IDENTIFIER OFF " "等同于‘ ‘表示字符串边界;
还有这里的双引号" 并不是两个单引号‘合起来的,是shift+”打出来的,初学者可能会犯这样的错误。
4.CHARINDEX和substring的用法
SELECT TOP 5 Areatype,CHARINDEX(‘itpacking‘,AreaType,2) FROM sfctemparea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;
SELECT TOP 5 charindex(‘-‘,AreaType) FROM SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;
select top 5 CHARINDEX(‘-‘,AreaType)+1,len(AreaType) as [Last Name] from SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;
select top 5 substring(AreaType,charindex(‘-‘,AreaType)+1,len(AreaType)) as [Last Name] from
SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;
5.ISNUMERIC,LEFT,RIGHT的用法
select ISNUMERIC(‘164‘)
select ISNUMERIC(LEFT(‘q2qqq222222‘,1))
select ISNUMERIC(RIGHT(‘q11q1‘,2))
6.关于sql中constraint 前缀的用意(PK、UK、DF、CK、FK)
- 主键
constraint PK_字段 primary key(字段),
- 唯一约束
constraint UK_字段 unique key(字段),
- 默认约束
constrint DF_字段 default(‘默认值‘) for 字段,
- 检查约束
constraint CK_字段 check(约束。如:len(字段)>1),
- 主外键关系
constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段)
7.查询数据库中的所有触发器
select name from sysobjects where xtype=‘TR‘ --所有触发器
select name from sysobjects where xtype=‘P‘ --所有存储过程
select name from sysobjects where xtype=‘V‘ --所有视图
select name from sysobjects where xtype=‘U‘ --所有表
//以上为SqlServer用法
Select object_name From user_objects Where object_type=‘TRIGGER‘; --所有触发器
Select object_name From user_objects Where object_type=‘PROCEDURE‘; --所有存储过程
Select object_name From user_objects Where object_type=‘VIEW‘; --所有视图
Select object_name From user_objects Where object_type=‘TABLE‘; --所有表
Select object_name From user_objects Where object_type=‘SEQUENCE‘; --序列
//以上为Oracle用法
8.触发器查询数据库中数据更新
if not exists(select 1 from deleted d join inserted i on d.ID=i.ID
and d.col1=1 and i.col1=2)
//if not exists 如果不存在
//(..)这里该是验证更新,更新前的id等于更新后的id,并且更新前col的值是1,更新后的值是2
9.存储过程代码片段之RAISERROR
RAISERROR (
N‘This is message %s %d.‘, -- Message text,
10, -- Severity,
1, -- State,
N‘number‘, -- First argument.
5 -- Second argument.
);
--The message text returned is: This is message number 5.
--Severity, 用户定义的与该消息关联的严重级别。(这个很重要)
任何用户都可以指定 0 到 18 之间的严重级别。
[0,10]的闭区间内,不会跳到catch;
如果是[11,19],则跳到catch;
如果[20,无穷),则直接终止数据库连接;
--State, 如果在多个位置引发相同的用户定义错误,
则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。
介于 1 至 127 之间的任意整数。(state 默认值为1)
IF @type = ‘MESUser‘ --MES登录账号检测
BEGIN
IF EXISTS ( SELECT *
FROM EUSER (nolock)
WHERE LOGONNAME = @parameter1
AND [DISABLED] = ‘1‘ )
BEGIN
SET @errorstr = N‘该账号已经被注销,请确认!‘
RAISERROR(@errorstr,16,1)
RETURN 101
END
SELECT @EXPIREDATE = [EXPIREDATE]
FROM EUSER (nolock)
WHERE LOGONNAME = @parameter1
IF @EXPIREDATE < GETDATE()
BEGIN
SET @errorstr = N‘该账号使用期限已到,请确认!‘
RAISERROR(@errorstr,16,1)
RETURN 101
END
--IF EXISTS ( SELECT *
-- FROM EUSER
-- WHERE LOGONNAME = @parameter1 [email protected]账号
-- AND [PASSWORD] = @parameter2 ) [email protected]密码
-- BEGIN
IF NOT EXISTS ( SELECT *
FROM mfstationuser
WHERE logonname = @parameter1 )
BEGIN
SET @errorstr = N‘该账号没有具有使用MES的权限,请确认!来自数据库表:mfstationuser‘
RAISERROR(@errorstr,16,1)
RETURN 101
END
ELSE
BEGIN
SELECT *
FROM EUSER
WHERE LOGONNAME = @parameter1
END
-- END
--ELSE
-- BEGIN
-- SET @errorstr = N‘账号或密码错误,请检查!‘
-- RAISERROR(@errorstr,16,1)
-- RETURN 101
-- END
END
10.SQL service日期,时间计算
时间戳 2018/5/31 14:01:53
--往前/后计算日期(YY\MM\DD)
SELECT CONVERT (VARCHAR(30), DATEADD(MM,-1, GETDATE()), 23) //这个
--结果2018-04-30
SELECT CONVERT(VARCHAR(10),GETDATE(),112),CONVERT(VARCHAR(10),GETDATE(),120)
--结果20180521 2018-05-21
SELECT GETDATE()
--2018-05-31 16:22:06.233
SELECT CONVERT (VARCHAR(30), DATEADD(dd,-1, GETDATE()), 23)
--2018-05-30
SELECT CONVERT (VARCHAR(30), GETDATE(),120)
--2018-05-31 16:37:13
SELECT CONVERT (VARCHAR(30), GETDATE(),23) //***这个
--2018-05-31
SELECT CONVERT (VARCHAR(10), GETDATE(),120)
--2018-05-31
原文地址:https://www.cnblogs.com/wayne05/p/9119285.html
时间: 2024-10-09 19:13:19