阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

手机号码,快捷登录

老司机
查看: 1256|回复: 0

绝对实用:用友维护人员常用SQL 脚本(第二部分)

[复制链接]
  • TA的每日心情
    开心
    2017-3-7 08:48
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2017-1-17 10:51:41 | 显示全部楼层 |阅读模式
    -- 通过SQL语句来更改用户的密码
    /*修改别人的,需要sysadmin  role    */
    EXEC  sp_password  NULL,  'newpassword',  'User'
    /*如果帐号为SA执行*/
    EXEC  sp_password  NULL,  'newpassword',  sa  

    -- 通怎么判断出一个表的哪些字段不允许为空?
    select  COLUMN_NAME  from  INFORMATION_SCHEMA.COLUMNS  where  IS_NULLABLE='NO'  and  TABLE_NAME='ua_account'  


    -- 如何在数据库里找到含有相同字段的表?
    -- a. 查已知列名的情况
    SELECT  b.name  as  TableName,a.name  as  columnname  
    From  syscolumns    a  INNER  JOIN    sysobjects  b   
    ON  a.id=b.id   
    AND  b.type='U'   
    AND  a.name='cacc_id'  --本例如:cacc_id列
    -- b. 未知列名查所有在不同表出现过的列名
    Select  o.name  As  tablename,s1.name  As  columnname  
    From  syscolumns  s1,  sysobjects  o  
    Where  s1.id  =  o.id  
       And  o.type  =  'U'  
       And  Exists  (  
           Select  1  From  syscolumns  s2   
           Where  s1.name  =  s2.name   
           And  s1.id  <>  s2.id  
           )
    -----------------------------------------------------------------
    -- 查询第xxx行数据
    -- 假设id是主键:  
    select  *  
    from  (select  top  xxx  *  from  yourtable)  aa  
    where  not  exists(select  1  from  (select  top  xxx-1  *  from  yourtable)  bb  where  aa.id=bb.id)
    -- 如果使用游标也是可以的  
    fetch  absolute  [number]  from  [cursor_name]  
    -- 行数为绝对行数

    -- SQL Server日期计算
    /*a. 一个月的第一天*/
    SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  
    /*b. 本周的星期一*/
    SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)
    /*c. 一年的第一天*/
    SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
    /*d. 季度的第一天*/
    SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
    /*e. 上个月的最后一天 */
    SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  
    /*f. 去年的最后一天*/
    SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))
    /*g. 本月的最后一天*/
    SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
    /*h. 本月的第一个星期一*/
    select  DATEADD(wk,  DATEDIFF(wk,0,                                                         
                                   dateadd(dd,6-datepart(day,getdate()),getdate())        
                               ),  0)      
    /*i. 本年的最后一天*/
    SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))

    1.显示本月第一天
    SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
    select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)
    2.显示本月最后一天
    select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))
    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
    3.上个月的最后一天
    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
    4.本月的第一个星期一
    select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)
    5.本年的第一天
    SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
    6.本年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))
    7.去年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
    8.本季度的第一天
    SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)  
    9.本周的星期一
    SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
    10.查询本月的记录
    select * from tableName where DATEPART(mm, theDate) = DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
    11.查询本周的记录
    select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
    12.查询本季的记录
    select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
    其中:GETDATE()是获得系统时间的函数。
    13.获取当月总天数:
    select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))
    select datediff(day,
    dateadd(mm, datediff(mm,'',getdate()), ''),
    dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))
    14.获取当前为星期几
    DATENAME(weekday, getdate())

    /*查询数据库的所有用户表*/
    use ufdata_002_2008
    select   name   from   sysobjects   where   type='U'

    --查看数据库中所有的触发器
    use ufdata_002_2008
    go
    select * from sysobjects where xtype='TR'

    --查询特定数据库中某一不知归属表的触发器
    /*查询某一个触发器TR_Ap_CloseBills所归属的表*/
    use ufdata_002_2008
    declare   @parent_obj_id   int   --定义父对象id变量
    --先找出父对象(所在表)的id(在触发器不重复归属于多个表的情况下)
    select @parent_obj_id=parent_obj
    from sysobjects where name='TR_Ap_CloseBills'
    and xtype='TR'  
    print '所在父对象(表)的ID是:'+str(@parent_obj_id)
    --接下来找出父对象(表)的名称
    select name as 触发器所在表为
    from sysobjects where   type='U' and id=@parent_obj_id


    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表