• 工作时对于sqlserver中一些函数及语句的应用记录


    1.NEWID()函数

    SELECT top 10 * FROM admin ORDER BY NEWID()   --从admin表中随机取10条数据

    摘记:

    order by 一般是根据某一字段排序,newid()的返回值 是uniqueidentifier ,order by newid()随机选取记录是如何进行的
    newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的结果当然就是无序的了
    或者
    select   top   10   *,newid()   as   Random   from   admin   ORDER BY   Random
    后者效率要高些
    因为newid()返回的是uniqueidentifier类型的唯一值。newid()每次产生的值都不一样,那么根据这样的值进行排序,每次的结果 也是不一样的。原理是 把所有的ID
    出然后用随机函数取出其中一个,然后用这个随机取到的ID去数据库里再取出记录,所有代价有点大。

    2.RAND()函数

    select rand():在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.275947316154813

    在实际的工作当中,我们一般是按需求生成一个多少位的随机数,所以执行:

    (1)select  floor(rand()*N)    --N为多少位,如果1000,就是生成3位数的随机数  

    (2)select ceiling(rand() * N)

    区别:floor()向下舍入为指定小数位数 如:floor(1.45,0)= 1;floor(1.55,0) = 1
            ceiling()向上舍入为指定小数位数 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2

    3.查询数据表中字段

    SELECT * FROM SYSCOLUMNS WHERE ID=OBJECT_ID('orders')

    下面部分为遇到问题时,搜寻函数,园里搜寻而来,直接贴过来的:

    SQl查询数据库表名、表的列名



    --读取库中的所有表名
    select name from sysobjects where xtype='u'

    --读取指定表的所有列名
    select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
    获取数据库表名和字段
    sqlserver中各个系统表的作用
        sysaltfiles      主数据库                  保存数据库的文件
    syscharsets      主数据库                  字符集与排序顺序
    sysconfigures    主数据库                  配置选项
    syscurconfigs    主数据库                  当前配置选项
    sysdatabases      主数据库                  服务器中的数据库
    syslanguages      主数据库                  语言
    syslogins        主数据库                  登陆帐号信息
    sysoledbusers    主数据库                  链接服务器登陆信息
    sysprocesses      主数据库                  进程
    sysremotelogins主数据库                  远程登录帐号

    syscolumns        每个数据库                列
    sysconstrains    每个数据库                限制
    sysfilegroups    每个数据库                文件组
    sysfiles          每个数据库                文件
    sysforeignkeys 每个数据库                外部关键字
    sysindexs        每个数据库                索引
    sysmenbers        每个数据库                角色成员
    sysobjects        每个数据库                所有数据库对象
    syspermissions 每个数据库                权限
    systypes          每个数据库                用户定义数据类型
    sysusers          每个数据库                用户


    //
    用什么方法可以得到一个表中所有的列名。SQl语句。
    select      列名=name      from      syscolumns      where      id=object_id(N'要查的表名')

    use gpStrudy
    select      name="name"      from      syscolumns      where      id=object_id(N'bookTable')
    获得字段的属性
    //这是从一段代码中考出来的,使用的是using    System.Data.OleDb; 
        public    int    GetTableFields(String    tableName,out    String[]    fields,out    String[]    fieldTypes) 
        ...{ 
        try 
        ...{ 
        OleDbCommand    dc          =    m_OleDb.CreateCommand();//创建一个执行对象用于执行sql查询 
        dc.CommandText            =    "select    *    from    "    +    tableName; 
        dc.Transaction            =    m_OleTrans; 
       
        OleDbDataReader    dr    =    dc.ExecuteReader();//执行sql查询 
        //获取数据库的架构信息 
        DataTable    schemaTable    =    dr.GetSchemaTable(); 
       
        int    fieldColumnCount    =    0; 
       
        fields    =    new    String[schemaTable.Rows.Count]; 
        fieldTypes    =    new    String[schemaTable.Rows.Count]; 
       
        for(int    i    =    0;i    <    schemaTable.Columns.Count;i++) 
        ...{ 
        if(schemaTable.Columns.ColumnName.IndexOf("ColumnName")    >=    0) 
        ...{ 
        //获取字段名称 
       
        for(int    k    =    0;k    <    schemaTable.Rows.Count;k++) 
        fields[k]    =    schemaTable.Rows[k].ItemArray
    .ToString(); 
       
        fieldColumnCount++; 
        if(fieldColumnCount    >=    2) 
        ...{ 
        dr.Close(); 
        dc.Dispose(); 
       
        dr    =    null; 
        dc    =    null; 
        return    schemaTable.Rows.Count; 
        } 
        } 
        else    if(schemaTable.Columns.ColumnName.IndexOf("DataType")    >=    0) 
        ...{ 
        //获取字段类型 
       
        for(int    k    =    0;k    <    schemaTable.Rows.Count;k++) 
        fieldTypes[k]    =    schemaTable.Rows[k].ItemArray
    .ToString(); 
       
        fieldColumnCount++; 
        if(fieldColumnCount    >=    2) 
        ...{ 
        dr.Close(); 
        dc.Dispose(); 
       
        dr    =    null; 
        dc    =    null; 
        return    schemaTable.Rows.Count; 
        } 
        } 
       
        } 
       
        dr.Close(); 
        dc.Dispose(); 
       
        dr    =    null; 
        dc    =    null; 
       
        return    0; 
       
        } 
        catch(Exception    ee) 
        ...{ 
        fields            =    new    String[1]; 
        fieldTypes    =    new    String[1]; 
        m_ErrorString    =    "Ado_Application:GetTableFields:error:"    +    ee.Message; 
        return    0; 
        } 
        }

                                                                                                           2013.10.14

  • 相关阅读:
    背包系列 hdu3449 有依赖背包
    背包系列 hdu 3535 分组背包
    屏蔽scrollview的滚动
    高精度算法代码
    输入法出现时,中间固定,底部上移的代码
    排序之分治排序
    排序之双向冒泡排序
    Miller Rabin 大素数测试
    来聊聊WWDC 苹果大会上的那些黑科技
    不想成为好leader的程序猿不是好攻城狮
  • 原文地址:https://www.cnblogs.com/huizi/p/3368373.html
Copyright © 2020-2023  润新知