码迷,mamicode.com
首页 > 数据库 > 详细

Sql Server (时间戳2018/5/31 22:07:36 )

时间:2018-05-31 23:00:24      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:view   状态   视图   ast   ror   erro   ora   ever   检查   

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)

  1. 主键
    constraint PK_字段 primary key(字段),
  2. 唯一约束
    constraint UK_字段 unique key(字段),
  3. 默认约束
    constrint DF_字段 default(‘默认值‘) for 字段,
  4. 检查约束
    constraint CK_字段 check(约束。如:len(字段)>1),
  5. 主外键关系
    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  ----@parameter1账号
                --                    AND [PASSWORD] = @parameter2 )  ------@parameter2密码
                --    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

Sql Server (时间戳2018/5/31 22:07:36 )

标签:view   状态   视图   ast   ror   erro   ora   ever   检查   

原文地址:https://www.cnblogs.com/wayne05/p/9119285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!