数据库中生成树,数据分析,SQLNULL引用
Code
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
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
Code
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](100) NOT 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
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](100) NOT 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 因为递归有点慢。
Code
cte的用法
with test_CTE(id,salary)
as
(
select id ,max(salary)
from test
group by id
)
select * from test_cte
cte的用法
with test_CTE(id,salary)
as
(
select id ,max(salary)
from test
group by id
)
select * from test_cte