最忌讳的是抱着希望的猜测,一切凭行事而让思考停止。

SQL SERVER随机取一条记录

上一篇 / 下一篇  2009-09-28 00:26:16

又想到一个新的方法:思路就是构建一个临时表#tmp原样存储目标表并添加一个identity字段,这样的话在临时表中每条记录就有了从1-n的序号了。然后定义一个局部变量,接受一个1-总记录条数的随机数。最后利用identity字段和@rnd变量在where子句中随机从所有记录中过滤出一条来。
51Testing软件测试网EV BSu s2V%T8f z,H
-------------------------------------------------------
if not exists(select * from tempdb.dbo.sysobjects where name like '#tmp%')
select identity(int,1,1) ID,* into #tmp from authors
51Testing软件测试网:DRX9?u4tcd
begin
declare @rnd int
select @rnd=rand()*(select count(*) from #tmp)+1
select * from #tmp
where ID=@rnd
end
---------------------------------------------------------

r{V9CR5U0
相关知识:在SQL中判断一个表是否存在 
SQL 语句: 
select * from sysobjects 
where id = object_id(N'[dbo].[table_name]')and   OBJECTPROPERTY(id, N'IsUserTable') = 1 
'注:table_name 为实际要检查的表名  
            
解释:  如果返回记录数为0则表明没有这个表,否则表示已经存在。 
51Testing软件测试网:x)p9w#TE3S/I
  systemobjects 表中保存着数据库的所有表、视图和存贮过程等的信息,检索这个系统表即可得到是否存在。此方法还适用于检查视图和存贮过程,相应的标志要改为IsView(视图/查询)或者IsProcedure(存贮过程),table_name 处view_name 或 procedure_name。

!t5b!Q b CC0
评价:这种方法较检查错误代码确定表是否存在的方法相对较麻烦一些,但功能更强大,不仅可以检查表还可以检查视图/查询、存贮过程等,用途比较广泛。后者简便易行,不需要任何先觉条件,但应用范围比较有限。个人认为,如果力求规范的编程,推荐使用第一种也就是搜索系统表的方法判断对象(表、视图等)是否存在。

?,jBiS0
判断一个临时表的存在
  时表存在于tempdb的sysobjects中   
  select * from tempdb.dbo.sysobjects where name like '#你的临时表%'
  临时表在tempdb的sysobjects中名字的存在形式如下   
  #tablename__________

'_Y y["tQ7S5wn0
51Testing软件测试网 `5G4U){,p6r6A[

TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 10205
  • 日志数: 18
  • 建立时间: 2009-09-07
  • 更新时间: 2009-12-27

RSS订阅

Open Toolbar