SqlServer 中查询子节对应的上级自定义函数

CREATE FUNCTION [dbo].[FN_TopGetOrgByUserName]
(
		@UserName NVARCHAR(128)
)
RETURNS @showOrg TABLE(id NVARCHAR(36))
AS
BEGIN
	DECLARE @baseOrg TABLE(id NVARCHAR(36),
	fullpath  NVARCHAR(200),
	shortName  NVARCHAR(200),
	parentid  NVARCHAR(36),
	[level] INT,index_baseOrg INT)

	INSERT INTO @baseOrg
	SELECT id,fullpath,shortName,parentid,[level],ROW_NUMBER()OVER(ORDER BY id)  FROM SysOrganization
	WHERE id IN (
	SELECT OrgID FROM SysPosition ,SysUserPosition,SysUser
	WHERE SysPosition.ID=SysPosition  AND SysUser.ID=SysUser_ID
	AND [email protected]
	AND basepositionid=‘‘
	)
	AND IsEnable=1 AND (IsDel=0 OR IsDel IS NULL)

	DECLARE @i INT
	DECLARE @j INT
	SET @i=1
	SELECT @j=COUNT(*)FROM @baseOrg WHERE [level]=1
	IF @j=1
	BEGIN
		INSERT INTO @showOrg
		SELECT id FROM SysOrganization
		WHERE  IsEnable=1 AND( IsDel=0 OR isdel IS NULL )

			END
	ELSE
		BEGIN
		SELECT @j=COUNT(*)FROM @baseOrg
		WHILE @i<[email protected]
		BEGIN
			DECLARE @currentID NVARCHAR(36)
			SELECT @currentID=ID FROM @baseOrg WHERE [email protected]
			DECLARE @levelChild INT
			DECLARE @t_level TABLE(id VARCHAR(MAX) , [level] INT)
			SET @levelChild = 1
			INSERT @t_level SELECT @currentID, @levelChild
			WHILE @@ROWCOUNT > 0
				BEGIN
					SET @levelChild = @levelChild + 1
					INSERT INTO @t_level SELECT a.ID , @levelChild
					FROM SysOrganization a , @t_Level b
					WHERE a.ParentID = b.id AND b.[level] = @levelChild - 1
				END
			INSERT INTO @showOrg SELECT id FROM @t_level WHERE id NOT IN (SELECT id FROM @showOrg)
			SET @[email protected]+1
		END
	END
RETURN
END

GO

Split 表函数将一个字符串按指定分隔符进行分割,返回一个表。  charindex:在一段字符中搜索字符或者字符串

create function split(  
    @string varchar(255),--待分割字符串  
    @separator varchar(255)--分割符  
)returns @array table(item varchar(255))  
as  
begin  
    declare @begin int,@end int,@item varchar(255)  
    set @begin = 1  
    set @end=charindex(@separator,@string,@begin)  
    while(@end<>0)  
    begin  
        set @item = substring(@string,@begin,@[email protected])  
        insert into @array(item) values(@item)  
        set @begin = @end+1  
        set @end=charindex(@separator,@string,@begin)  
    end  
    set @item = substring(@string,@begin,len(@string)[email protected])  
    if (len(@item)>0)  
        insert into @array(item) values(substring(@string,@begin,len(@string)[email protected]))  
    return  
end  
时间: 2024-10-07 09:57:10

SqlServer 中查询子节对应的上级自定义函数的相关文章

SQLServer中查询的数字列前面补0返回指定长度的字符串

SQLServer中查询的数字列前面补0返回指定长度的字符串: 如: 角本如下: /****** Script for SelectTopNRows command from SSMS ******/ SELECT TOP 1000 [ID] ,[SN] ,[Name] FROM [EduDB].[dbo].[TestTab] select Right('0123456',SN) from TestTab; select RIGHT(REPLICATE('0',5)+CAST(SN AS var

DB 查询分析器 方便地创建DB2自定义函数

DB 查询分析器 方便地创建DB2自定义函数                           马根峰            (广东联合电子服务股份有限公司, 广州 510300) 摘要          本文详细地介绍了"万能数据库查询分析器",中文版本<DB 查询分析器>.英文版本<DB Query Analyzer>6.03 来方便地创建DB2函数.创建DB2存贮过程与此相同,大家可以参照以下步骤.另外,本示例还适用于SQL语句要以逗号来分隔的数据库系统

Django中利用filter与simple_tag为前端自定义函数的实现方法

前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些的函数功能并不支持,例如通过模板来判断一个返回值是否是合法的数字类型,此时如果又不希望通过后台视图代码来实现的话,我们就可以自定义一些前端函数功能. Django为我们提供了两种方式,分别是filter和simple_tag,下面对比两种方式,分别实现判断返回值的功能函数. 准备工作 1.应用

sqlserver中的 数据转换 与 子查询

原文:sqlserver中的 数据转换 与 子查询 数据类型转换 --cast转换 select CAST(1.23 as int) select CAST(1.2345 as decimal(18,2)) select CAST(123 as varchar(10))     整型转换成字符串型 select CAST('123.333' as decimal(18,4))    字符串型转换成浮点型 --convert转换 select CONVERT(int,12.345) 子查询(嵌套查

子查询三(在FROM子句中使用子查询)

FROM子句中使用子查询一般都是返回多行多列,可以将其当作一张数据表 示例一.查询出每个部门的编号,名称,位置,部门人数,平均工资 SELECT d.deptno,d.dname,d.loc,temp.con,temp.avgsal FROM dept d,(SELECT deptno dno,COUNT(empno) con,ROUND (AVG(sal),2) avgsal FROM emp GROUP BY deptno) temp WHERE d.deptno=temp.dno; 示例二

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

在 SQL Server 数据库的 WHERE 语句中使用子查询

这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库的.读者可以阅读我的SQL Server使用入门学习使用这些免费的工具. 在WHERE语句中使用子查询 在WHERE语句中使用子查询是非常常见的.常见的用法是用EXISTS或IN测试存在性.在某些情况下重新考虑查询语

Hibernate中使用子查询

子查询: 子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持. 如下面代码所示: List list=session.createQuery("from Customer c where 1>(select count(o) from c.orders o)").list(); 上面的程序查询订单数超过1的所有客户,因此和上面子查询HQL语句对应的SQL语句为: Select *

子查询一(WHERE中的子查询)

子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念. 子查询返回结果子查询可以返回的数据类型一共分为四种: 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据: 单行多列:返回一行数据中多个列的内容: 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围: 多行多列:查询返回的结果是一张临时表: 在WHERE子句中使用子查询 在WHERE子句之中处理单行单列子查询.多行单列子查询.单行