1、增加一个字段
if not exists(select 1 from syscolumns where id=object_id('t_item') and name='oldnumber')
alter table t_item add oldnumber varchar(80) null
2、
SQL递归查询
今天用到一条查询语句,对于给定一个父结点, 取出存于表中的菜单的操作是比较容易的, 具体操作是这样的,:
表结构:
SQL> desc t_right
Name Type Nullable Default Comments
--------------- ------------- -------- ------- --------------------------------
RIGHT_ID NUMBER(10) 权限ID
RIGHT_NAME VARCHAR2(24) Y 权限名称
RIGHT_TYPE CHAR(1) 权限类型 1:配置系统的权限 2 业务系统的权限 3报表系统
REMARK VARCHAR2(120) Y 备注
CONTROL_TYPE CHAR(1) Y 控制类型 1菜单 2按键
PARENT_RIGHT_ID NUMBER(10) Y 父结点ID
递归查找父结点为303下的所有子结点:
select * from t_right r
start with r.parent_right_id = 303 connect by prior r.right_id = r.parent_right_id ;
结果:
SQL> select * from t_right r
2 start with r.parent_right_id = 303 connect by prior r.right_id = r.parent_right_id ;
RIGHT_ID RIGHT_NAME RIGHT_TYPE REMARK CONTROL_TYPE PARENT_RIGHT_ID
----------- ----------------------- ---------------- ----------- ------------ -----------------------------
30304 工时池统计分析 2 1 303
30305 施工单查询 2 1 303
30301 超时单 2 1 303
3030101 施工单 2 1 30301
3030102 任务单 2 1 30301
30302 异常单 2 1 303
3030201 任务单 2 1 30302
30303 工时池查询 2 1 303
30306 任务单查询 2 1 303
9 rows selected
-------
收集的几条在oracle中通过connect by prior来实现递归查询
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
有一张表 t
connect by 是结构化查询中用到的,其基本语法是: PRIOR和START WITH关键字是可选项
其中START WITH ID IN里面的值也可以替换SELECT 子查询语句.
|
http://hi.baidu.com/ilkikyo/blog/item/c801a2f3624f1053352accaa.html
-----------查找某一节点所有子节点2009-07-17
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetSubtreeInfo]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetSubtreeInfo]
go
CREATE FUNCTION dbo.GetSubtreeInfo
( @QuYuId AS varchar(50)
)
RETURNS @treeinfo table
( [QuYuId] [varchar] (50) NOT NULL,
[QuYuMiaoShu] [varchar] (100) NOT NULL,
[ShangJiId] [varchar] (50) NULL ,
[Level] [int] not null
) AS
BEGIN
DECLARE @level AS int
SELECT @level = 0
INSERT INTO @treeinfo
SELECT [QuYuId], [QuYuMiaoShu], [ShangJiId], @level
FROM [ipcam_zd_QuYu]
WHERE [QuYuId] = @QuYuId
WHILE @@ROWCOUNT > 0
BEGIN
SET @level = @level + 1
INSERT INTO @treeinfo
SELECT E.[QuYuId], E.[QuYuMiaoShu], E.[ShangJiId], @level
FROM [ipcam_zd_QuYu] AS E JOIN @treeinfo AS T
ON E.[ShangJiId] = T.[QuYuId] AND T.[Level] = @level - 1
END
RETURN
END
go
SELECT * FROM dbo.GetSubtreeInfo('QY001')