|
==================================================================== 随机取不相同的数 ======================================== /* 功能:随机从(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 作者: 特蓝克斯 时间: 2006-6-20 15:34
好帖!支持一下! 作者: DVD 时间: 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
====================================== 今天就写这么多,下周过来再传些。 作者: yuanzhang88 时间: 2006-6-20 23:17
学习一下!谢谢! 作者: DVD 时间: 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 张三 |