标题: SQL2000常用函数OR语句 (查看:3199 回复:10)
DVD
中级网管

数据库技术


光荣退伍  
UID 183991
精华 5
积分 569
帖子 3140
MST币 10705 点    
BST币 569 点    赚取
阅读权限 100
注册 2005-4-11
来自 IT鸟语学院
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-20 14:58  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友
爱琴思邮件系统iGENUS V5.0
SQL2000常用函数OR语句
本帖发表在我是网管论坛,帖子地址:http://bbs.54master.com/68867,1,1
====================================================================
随机取不相同的数
========================================
/*
功能:随机从(1,2,3,4,5,6,7,8,9,10)取得4个不相同的数
设计:over
时间:GetDate()
*/
declare @x int
create table #temp (dd int)
set @x=1
while @x<=10
begin
        insert into #temp select @x
        set @x=@x+1
end
select * FROM #temp
select top 4 * from #temp order by newid()
drop table #temp

======================================================
NOT EXISTS的妙用
======================================================

CREATE TABLE #Temp(学号 int ,姓名 nvarchar(20),科目 nvarchar(30),成绩 float)
INSERT INTO #Temp SELECT 1,'张三',  '语文',  80
UNION SELECT 2,'李四'  ,'语文',  83
UNION SELECT 3,'王五'  ,'英语',  99
UNION SELECT 4,'李四'  ,'数学',  88
UNION SELECT 5,'张三'  ,'英语',  66
UNION SELECT 6,'王五'  ,'数学',  87
UNION SELECT 7,'李四'  ,'英语', 69
UNION SELECT 8,'张三'  ,'数学',  63
UNION SELECT 9,'王五'  ,'语文',  77

SELECT * FROM #Temp
SELECT A.* FROM #Temp  AS A WHERE NOT EXISTS (SELECT 1 FROM #Temp AS B WHERE B.科目=A.科目 AND B.成绩>A.成绩 )
DROP TABLE #Temp

==============================================================
删除当前数据库有用户表数据
==============================================================
/*
功能:删除当前数据库有用户表数据
设计:
时间:2006-05
备注:该脚本执行危险性为★★★★★,不要随意执行
*/

DECLARE @tablename varchar(50)
DECLARE @truncatesql varchar(255)
DECLARE TrCun_Cursor CURSOR FOR
select [name] from sysobjects where type = 'U'
OPEN TrCun_Cursor
FETCH TrCun_Cursor INTO @tablename
WHILE(@@fetch_status = 0)
BEGIN
        SET @truncatesql = 'truncate table ' + @tablename
        --exec(@truncatesql) --当要删除时,就去掉--
        PRINT @truncatesql
        FETCH TrCun_Cursor INTO @tablename
END
CLOSE TrCun_Cursor
DEALLOCATE TrCun_Cursor

===========================================================
返回某一表的所有字段、存储过程、函数的参数信息
===========================================================
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_GetObjColInfo]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[FN_GetObjColInfo]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


/*
功能:返回某一表的所有字段、存储过程、函数的参数信息
设计:OK_008
时间:2006-05
*/
CREATE FUNCTION FN_GetObjColInfo
(@ObjName varchar(50))
RETURNS  @Return_Table TABLE(
                TName nvarchar(50),
                TypeName nvarchar(50),
                TypeLength nvarchar(50),
                Colstat        Bit
                )  
AS  
BEGIN
        INSERT  @Return_Table
                select b.name as 字段名,c.name as 字段类型,b.length/2 as 字段长度,b.colstat as 是否自动增长
                from sysobjects a
                inner join syscolumns b on a.id=b.id
                inner join systypes c on c.xusertype=b.xtype
                where a.name =@ObjName
                order by  B.ColID
        RETURN
END



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

[ 点这里复制网址,推荐给你QQ/MSN上的好友们! ]
本站声明:以上内容由网友 DVD 提供,与54master立场无关!
《我是网管》论坛
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--
[ 顶部 ]
特蓝克斯
版主

数据库技术


现役斑竹  
UID 102607
精华 10
积分 556
帖子 3652
MST币 8600 点    
BST币 556 点    赚取
阅读权限 180
注册 2004-3-7
来自 辽宁沈阳
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-20 15:34  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友QQ Yahoo!
好帖!支持一下!

本站声明:以上内容由网友 特蓝克斯 提供,与54master立场无关!
《我是网管》论坛
-创想社区╄   博客圈:PHP开发团队
〖54ASP设计之旅Ⅰ〗:4714166 (已满) 〖54PHP设计之旅Ⅱ〗:7429484  〖54SQL设计之旅Ⅲ〗:7429318
〖创想网〗ASP技术(未满):18042617
[ 顶部 ]
DVD
中级网管

数据库技术


光荣退伍  
UID 183991
精华 5
积分 569
帖子 3140
MST币 10705 点    
BST币 569 点    赚取
阅读权限 100
注册 2005-4-11
来自 IT鸟语学院
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-20 15:49  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友
===================================================================
日期的查询:
===================================================================
上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

======================================================================
工资票面分配,计算100元到1元的各票面值张数
======================================================================
-- 工资票面分配,计算100元到1元的各票面值张数
DECLARE @SUM_SALARY MONEY
DECLARE @SUM_LEFT INT
DECLARE @V100 INT
DECLARE @V50 INT
DECLARE @V20 INT
DECLARE @V10 INT
DECLARE @V5 INT
DECLARE @V2 INT
DECLARE @V1 INT

SET @SUM_SALARY=2122995652.58

SET @SUM_LEFT=ROUND(@SUM_SALARY,0,1)
SET @V100=@SUM_LEFT/100
SET @V50=@SUM_LEFT%100/50
SET @V20=@SUM_LEFT%100%50/20
SET @V10=@SUM_LEFT%100%50%20/20
SET @V5=@SUM_LEFT%100%50%20%10/5
SET @V2=@SUM_LEFT%100%50%20%10%5/2
SET @V1=@SUM_LEFT%100%50%20%10%5%2/1

-- 测试
PRINT '100:' + cast( @V100 AS NVARCHAR(100))
PRINT ' 50:' + cast( @V50 AS NVARCHAR(100))
PRINT ' 20:' + cast( @V20 AS NVARCHAR(100))
PRINT ' 10:' + cast( @V10 AS NVARCHAR(100))
PRINT '  5:' + cast( @V5 AS NVARCHAR(100))
PRINT '  2:' + cast( @V2 AS NVARCHAR(100))
PRINT '  1:' + cast( @V1 AS NVARCHAR(100))

---以下是写成一个自定义函数:
-- 工资票面分配,计算100元到1元的各票面值张数
CREATE FUNCTION  Get_EmployeeSalaryAllot
(@SUM_SALARY MONEY ,@RKey INT )
RETURNS INT AS  
BEGIN
DECLARE @SUM_LEFT INT
DECLARE @Return INT
SET @SUM_LEFT=ROUND(@SUM_SALARY,0,1)
IF @RKey=100  
        SET @Return=@SUM_LEFT/100
ELSE IF @RKey=50
        SET @Return=@SUM_LEFT%100/50
ELSE IF @RKey=20
        SET @Return=@SUM_LEFT%100%50/20
ELSE IF @RKey=10
        SET @Return=@SUM_LEFT%100%50%20/10
ELSE IF @RKey=5
        SET @Return=@SUM_LEFT%100%50%20%10/5
ELSE IF @RKey=2
        SET @Return=@SUM_LEFT%100%50%20%10%5/2
ELSE IF @RKey=1
        SET @Return=@SUM_LEFT%100%50%20%10%5%2/1
RETURN @Return
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

======================================
今天就写这么多,下周过来再传些。

本站声明:以上内容由网友 DVD 提供,与54master立场无关!
[ 顶部 ]
yuanzhang88
学徒网管




UID 57820
精华 0
积分 34
帖子 248
MST币 1110 点    
BST币 34 点    赚取
阅读权限 60
注册 2006-2-11
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-20 23:17  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
学习一下!谢谢!

本站声明:以上内容由网友 yuanzhang88 提供,与54master立场无关!
[ 顶部 ]
DVD
中级网管

数据库技术


光荣退伍  
UID 183991
精华 5
积分 569
帖子 3140
MST币 10705 点    
BST币 569 点    赚取
阅读权限 100
注册 2005-4-11
来自 IT鸟语学院
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-23 17:56  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友
原问题:
==========================================================
急,请教大家一个关于sqlserver2000中递归查询的问题
现在有一个表a,想查询某个id的本身及所有子,表数据如下:
id supid name
1 0 总经理办公室
2 1 人事部
3 1 业务部
4 3 业务部(内)
5 3 业务部(外)
6 4 张三
请问怎么用递归查询去实现,得到如下结果呢?
3 1 业务部
4 3 业务部(内)
5 3 业务部(外)
6 4 张三

还有一个问题是,这个a表还有与其他进行关联的

==========================================================
06-06-23 今天上Itput.net时,看到这就问题,后来拿来分析一下,突然想到
用临时表,也许可以解决,后面经过测试真的行。方法如下:
==========================================================

用递归,在SQL中最大层只能为32层。要是层数太多还是不要使用。

CREATE TABLE DataDepartment([id] int ,supid int,[name] nvarchar(20))
INSERT INTO DataDepartment
SELECT 1, 0 ,'总经理办公室'
UNION SELECT 2,1,'人事部'
UNION SELECT 3,1,'业务部'
UNION SELECT 4,3,'业务部(内)'
UNION SELECT 5,3,'业务部(外)'
UNION SELECT 6,4,'张三'

SELECT * FROM DataDepartment

DECLARE @id int,@i int,@Rows int
SET @id=3
CREATE TABLE #Temp([id] int ,supid int,[name] nvarchar(20))

SET @i=0
SET @Rows=0
INSERT #Temp SELECT * FROM DataDepartment AS A WHERE A.[id]=@id
WHILE @i<=@Rows
BEGIN
INSERT #Temp SELECT * FROM DataDepartment AS A WHERE EXISTS(SELECT 1 FROM #Temp AS B WHERE B.[id]=A.[supid])
AND NOT EXISTS(SELECT 1 FROM #Temp AS B WHERE B.[id]=A.[id])
SET @i=@i+1
SET @Rows =(SELECT COUNT(*) FROM #Temp )
END
SELECT * FROM #Temp
DROP TABLE DataDepartment,#Temp

结果:
3 1 业务部
4 3 业务部(内)
5 3 业务部(外)
6 4 张三

本站声明:以上内容由网友 DVD 提供,与54master立场无关!
[ 顶部 ]
特蓝克斯
版主

数据库技术


现役斑竹  
UID 102607
精华 10
积分 556
帖子 3652
MST币 8600 点    
BST币 556 点    赚取
阅读权限 180
注册 2004-3-7
来自 辽宁沈阳
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-25 12:15  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友QQ Yahoo!
不错,好贴~!加亮一周时间,供大家学习下

本站声明:以上内容由网友 特蓝克斯 提供,与54master立场无关!
《我是网管》论坛
-创想社区╄   博客圈:PHP开发团队
〖54ASP设计之旅Ⅰ〗:4714166 (已满) 〖54PHP设计之旅Ⅱ〗:7429484  〖54SQL设计之旅Ⅲ〗:7429318
〖创想网〗ASP技术(未满):18042617
[ 顶部 ]
@@沙沙··
入门网管




UID 396535
精华 0
积分 50
帖子 9
MST币 681 点    
BST币 50 点    赚取
阅读权限 70
注册 2006-6-16
来自 广西
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-26 19:14  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友QQ
在同一个表单里如何显示两个不同的结果

本站声明:以上内容由网友 @@沙沙·· 提供,与54master立场无关!
[ 顶部 ]
特蓝克斯
版主

数据库技术


现役斑竹  
UID 102607
精华 10
积分 556
帖子 3652
MST币 8600 点    
BST币 556 点    赚取
阅读权限 180
注册 2004-3-7
来自 辽宁沈阳
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-27 09:36  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友QQ Yahoo!
做个视图!

本站声明:以上内容由网友 特蓝克斯 提供,与54master立场无关!
《我是网管》论坛
-创想社区╄   博客圈:PHP开发团队
〖54ASP设计之旅Ⅰ〗:4714166 (已满) 〖54PHP设计之旅Ⅱ〗:7429484  〖54SQL设计之旅Ⅲ〗:7429318
〖创想网〗ASP技术(未满):18042617
[ 顶部 ]
czenghua
初级网管



UID 44819
精华 0
积分 148
帖子 187
MST币 678 点    
BST币 148 点    赚取
阅读权限 80
注册 2003-12-28
状态 离线
 
[ 使用道具 ]  
发表于 2006-6-27 16:50  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友
收藏,现正努力学习SQL呢!

本站声明:以上内容由网友 czenghua 提供,与54master立场无关!
《我是网管》论坛
电脑世界论坛欢迎你:http://computer.91.tc
[ 顶部 ]
阿曾
初级网管



UID 297019
精华 0
积分 100
帖子 50
MST币 731 点    
BST币 100 点    赚取
阅读权限 80
注册 2003-2-18
来自 四川内江
状态 离线
 
[ 使用道具 ]  
发表于 2006-7-29 16:37  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友QQ
正在初级学习中,还是有点看不懂,继续努力!!!

不成功便成仁!!!!!!!!1

本站声明:以上内容由网友 阿曾 提供,与54master立场无关!
[ 顶部 ]
  
 



当前时区 GMT+8, 现在时间是 2008-10-11 12:00

Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.079391 second(s), 12 queries , Gzip enabled

清除 Cookies - 关于我是网管 - 联系我是网管 - 广告服务 - 诚聘版主 - 无图版 - WAP -