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