SQLServer常用自定义函数记录

246 阅读1分钟

1、查询完整组织名称

USE [populac]
GO
/****** Object:  UserDefinedFunction [dbo].[f_getUnitName]    Script Date: 07/10/2018 16:48:08 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[f_getUnitName](@ VARCHAR(20)) 

RETURNS varchar(150) 
AS 
BEGIN 
	DECLARE @t TABLE(unitcode VARCHAR(30), upunitcode VARCHAR(30), [unitname] VARCHAR(80), [upunitname] VARCHAR(80),Level INT)
    DECLARE @level INT
	DECLARE @result varchar(150)
    SET @level=1
    INSERT INTO @t SELECT unitcode,upunitcode,unitname,upunitname,@level FROM unit WHERE unitcode=@
    WHILE(@@ROWCOUNT>0)
        BEGIN 
            SET @level=@level+1
            INSERT INTO @t SELECT t.unitcode,t.upunitcode,t.unitname,t.upunitname,@level FROM unit AS t,@t AS a WHERE t.upunitcode<>'@' and a.upunitcode=t.unitcode AND a.level=@level-1
        END
   BEGIN
           DELETE @t where unitcode=@
   END
   --stuff((select '-'+[unitname]  from dbo.f_getParent('100100020404') order by unitcode for xml path('')), 1, 1, '')
   select @result = stuff((select '-'+[unitname]  from @t order by unitcode for xml path('')), 1, 1, '')
RETURN @result
END

select dbo.f_getUnitName('100100020404'); //---党委/工会-党群办公室

#2 查询所有表结构

/*********************************
SqlServer查询出数据库中所有的表及其字段属性
*********************************/
SELECT  ( CASE WHEN a.colorder = 1 THEN d.name
               ELSE ''
          END ) AS 表名 ,--如果表名相同就返回空  
        a.colorder AS 字段序号 ,
        a.name AS 字段名 ,
        ( CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
               ELSE ''
          END ) AS 标识 ,
        ( CASE WHEN ( SELECT    COUNT(*)
                      FROM      sysobjects--查询主键  
                      WHERE     ( name IN (
                                  SELECT    name
                                  FROM      sysindexes
                                  WHERE     ( id = a.id )
                                            AND ( indid IN (
                                                  SELECT    indid
                                                  FROM      sysindexkeys
                                                  WHERE     ( id = a.id )
                                                            AND ( colid IN (
                                                              SELECT
                                                              colid
                                                              FROM
                                                              syscolumns
                                                              WHERE
                                                              ( id = a.id )
                                                              AND ( name = a.name ) ) ) ) ) ) )
                                AND ( xtype = 'PK' )
                    ) > 0 THEN '√'
               ELSE ''
          END ) AS 主键 ,--查询主键END  
        b.name AS 类型 ,
        a.length AS 占用字节数 ,
        COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS 长度 ,
        ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小数位数 ,
        ( CASE WHEN a.isnullable = 1 THEN '√'
               ELSE ''
          END ) AS 允许空 ,
        ISNULL(e.text, '') AS 默认值 ,
        ISNULL(g.[value], '') AS 字段说明
FROM    syscolumns a
        LEFT JOIN systypes b ON a.xtype = b.xusertype
        INNER JOIN sysobjects d ON a.id = d.id
                                   AND d.xtype = 'U'
                                   AND d.name <> 'dtproperties'
        LEFT JOIN syscomments e ON a.cdefault = e.id
        LEFT JOIN sys.extended_properties g ON a.id = g.major_id
                                               AND a.colid = g.minor_id
ORDER BY a.id ,
        a.colorder;