数据库中生成树,数据分析,SQLNULL引用

本文介绍了如何使用JavaScript创建表单并设置属性进行文件上传,探讨了null值在数据库中的特殊处理方式,展示了通过SQL实现动态生成树状结构的方法,包括使用CTE(公用表表达式)和临时表两种方案。
ContractedBlock.gifExpandedBlockStart.gifCode
1  //create form
 
2  this.form = document.createElement("FORM");
 
3  this.form.id = "jasonUploadForm";
 
4  this.form.name = "jasonUploadForm";
 
5  this.form.method = "post";
 
6  this.form.action = actionTarget;     
 
7     
 
8  //this.form.setAttribute("enctype", "multipart/form-data");
 
9  this.form.encoding = "multipart/form-data";
10         
11  document.body.appendChild(this.form);


null值的引用
一言以蔽之:Null表示“不确定”: 
1.Null参与运算仍为Null. 不确定+1-->不确定 
2.null是不能用"="来比较 不确定与不确定不可比较 
3.当统计时Null被忽略 不确定没法计数 
4.值in(null)不行 一个不确定不可能在另一个不确定中 
5.ORDER BY时,首先呈现NULL值 总得排个序吧,排哪都不合适,最前吧 
6.GROUP BY时,NULL当一组 总得有个组吧,就归一组吧 
7.NULL也不等于NULL 参见第1条。

数据集需要跨数据库.有时数据需要整合两个以上的数据库的数据,这对按需所取造成一定的困难. 


:结果集以远程web service返回,分布式调用性能略抵,频繁的调用并不理想. 


这两个用gridview 倒是不错..可以用来分页



原因是row_number()的产生是在数据全部查询出来后再按照排序顺序从一开始生成的,所以它要把页数之前的所有数据都先装成内存,才能生成.


 string f 
= DateTime.Now.ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
            string g 
= DateTime.Now.ToString("yyyy/MM/dd/hh/mm/ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);



上传没刷新的组件
http:
//en.fileuploadajax.subgurim.net/


动态生成树

DECLARE @i INT
SELECT @i=2;

WITH Co_ItemNameSet_CTE(ItemId, ParentItemId, ItemName,Level)
AS
(
    
SELECT  ItemId, ParentItemId, ItemName ,1 AS [Level]
    
FROM  Co_ItemNameSet
    
WHERE itemid=@i  
    
UNION ALL
    
SELECT  c.ItemId, c.ParentItemId, c.ItemName ,[Level] + 1
    
FROM  Co_ItemNameSet c  INNER JOIN Co_ItemNameSet_CTE ct
    
ON c.ParentItemId=ct.ItemId
)

SELECT * FROM Co_ItemNameSet_CTE
go

 

 

 

 

ContractedBlock.gifExpandedBlockStart.gifCode
sql2000版本
--sql2000版本
DECLARE @i INT
SELECT @i=2;

/*
使用临时表作为堆栈来跟踪所有正在处理中的项目(已经开始但尚未结束)。
某个项目一旦处理完毕,将被从堆栈中删除。
当发现新的项目时,这些项目将被添加到堆栈中。
*/
CREATE TABLE #tem(
[ItemId] [INT]  NOT NULL,
[level] INT
);

/*
存放结果
*/
CREATE TABLE #list(
[ItemId] [INT]  NOT NULL,
[ParentItemId] [INT] NOT NULL DEFAULT ((0)),
[ItemName] [nvarchar](100NOT NULL DEFAULT (''),
[level] INT
);

INSERT INTO #tem([ItemId],[level])
SELECT  ItemId, 1
FROM  Co_ItemNameSet
WHERE itemid=@i  

INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])
SELECT  ItemId, ParentItemId, ItemName ,1
FROM  Co_ItemNameSet
WHERE itemid=@i  

DECLARE @level INT
SELECT @level=1

DECLARE @current INT
SELECT @current=0

/*
当 @level 大于 0 时,执行以下步骤: 
1.如果当前级别 (@level) 的堆栈中有项目,就选择其中一个,并称之为 @current。
2.从堆栈中删除该项目以免重复处理它,然后将其所有子项目添加到堆栈的下一级 (@level + 1) 中。  
3.如果有子项目 (IF @@ROWCOUNT > 0),则下降一级处理它们 (@level = @level + 1);否则,继续在当前级别上处理。
4.最后,如果在当前级别的堆栈中没有待处理的项目,则返回到上一级,看上一级是否有待处理的项目 (@level = @level - 1)。当再没有上一级时,则完毕。 
*/
WHILE(@level>0)
BEGIN
    
SELECT @current=ItemId
    
FROM #tem
    
WHERE [level]=@level

    
IF @@ROWCOUNT>0
    
BEGIN
        
--从堆栈中删除该项目以免重复处理它
        DELETE FROM #tem
        
WHERE [level]=@level and ItemId=@current

        
--将其所有子项目添加到堆栈的下一级 (@level + 1) 中。  
        INSERT INTO #tem([ItemId],[level])
        
SELECT [ItemId],@level+1
        
FROM Co_ItemNameSet
        
WHERE ParentItemId=@current
    
        
--将其所有子项目添加
        INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])
        
SELECT [ItemId],[ParentItemId],[ItemName] ,@level+1
        
FROM Co_ItemNameSet
        
WHERE ParentItemId=@current
        
        
IF @@rowcount>0
        
BEGIN
            
SELECT @level=@level+1
        
END
    
END
    
ELSE
    
BEGIN
        
SELECT @level=@level-1
    
END
END

--显示结果
SELECT * FROM #list

DROP TABLE #tem
DROP TABLE #list
go

 

 

 

感觉不要用CTE   因为递归有点慢。

ContractedBlock.gifExpandedBlockStart.gifCode
cte的用法  

with test_CTE(id,salary)
as
(
    
select id ,max(salary)
    
from test
    
group by id
)
select * from test_cte

转载于:https://www.cnblogs.com/z2002m/archive/2008/10/13/1309854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值