您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 威尼斯官方网站5、参谋项目清单列表

威尼斯官方网站5、参谋项目清单列表

发布时间:2019-12-31 19:29编辑:威尼斯官方网站登录浏览(118)

    正文目录列表:

    1、SQL Server表设计视图中的数据类型列呈现效果

    2、模拟达成相像的数据类型突显效果

    3、测量检验效果

    4、总结语

    5、参谋项目清单列表

     

    1、SQL Server表设计视图中的数据类型列呈现效果

     

    在SQL Server 2011的表设计视图中能够看见如下图的作用:

    威尼斯官方网站 1

    威尼斯官方网站 2

    如上海教室所示杏红矩形框圈住的数据类型列中体现的效果,特别针对顾客定义数据类型也体现了其宗旨数据类型。

     

    这种针对字段列显示的数据类型效果很直接,超轻松见到其数据类类型是如何,以致看能看见精度或小数位,最注重的是显得了客户定义数据类型的为主数据类型。有时候在数据库设计中一再定义通用的顾客定义数据类型,如居民身份证,手机号码,性别,名称等等通用的客户定义数据类型。

     

    有的时候将表字段列导出来保存doc、excel以致html,针对字段列的数据类型展现往往须要4个字段列来展现,如下图所示:

    威尼斯官方网站 3

    威尼斯官方网站 4

    上海体育场所所示的就不太很直观的见到该字段的数据类型的详细音讯,极度该字段列的数据类型为顾客定义的数据类型时,更无从看出来它的基本数据类型。

     

    只顾:在SQL Server中sysname数据定义数据类型私下认可是系统定义的,在表设计视图中找不到该该数据类型,只可以通过DDL命令来定义归属sysname的字段列。

     

    **2、模拟完成相像的数据类型突显效果
    **

     

    为了将字段列突显的数据类型体现的更有观望众清简单,自个儿就依样画葫芦SQL Server 表设计视图中的字段列的显得效果的兑现效果与利益。

     

    兑现四个标量函数,帮衬将挑广陵数据类型大小写的效用,具体的T-SQL代码如下:

    IF OBJECT_ID(N'[dbo].[ufn_GetDisplayDataTypeName]', 'FN') IS NOT NULL
    BEGIN
        DROP FUNCTION [dbo].[ufn_GetDisplayDataTypeName];
    END
    GO
    
    --==================================
    -- 功能: 获取字段列显示的数据类型名称
    -- 说明: 支持用户定义类型,可以运行于SQL Server 2005+
    -- 创建: yyyy-MM-dd hh:mm-hh:mm XXX 创建内容描述
    -- 修改: yyyy-MM-dd hh:mm-hh:mm XXX 修改内容描述
    --==================================
    CREATE FUNCTION [dbo].[ufn_GetDisplayDataTypeName]
    (     
         @intUserTypeID AS INT                -- 用户类型ID
        ,@sntMaxLength AS SMALLINT            -- 最大字节长度
        ,@tntPrecision AS TINYINT            -- 精度
        ,@tntScale AS TINYINT               -- 小数位
        ,@bitIsUpperDisplay AS BIT = 0        -- 是否大写显示(默认小写显示)
    ) RETURNS NVARCHAR(270)
    AS
    BEGIN
        SET @bitIsUpperDisplay = ISNULL(@bitIsUpperDisplay, 0);
    
        DECLARE
             @nvcDataTypeName AS NVARCHAR(128)
            ,@nvcBaseDataTypeName AS NVARCHAR(128)
            ,@nvcSuffixDisplayName AS NVARCHAR(14)
        SELECT
             @nvcDataTypeName = N''
            ,@nvcBaseDataTypeName = N''
            ,@nvcSuffixDisplayName = N''
    
        SELECT
             @nvcDataTypeName = [name]
            ,@nvcBaseDataTypeName = (CASE WHEN (@nvcDataTypeName = N'sysname' OR [is_user_defined] = 1) THEN TYPE_NAME([system_type_id]) ELSE @nvcDataTypeName END)
        FROM 
            [sys].[types]
        WHERE 
            [user_type_id] = @intUserTypeID;
    
       SET @nvcDataTypeName = (CASE WHEN @nvcDataTypeName <> @nvcBaseDataTypeName THEN @nvcDataTypeName + N':' ELSE N'' END);
    
       SET @nvcBaseDataTypeName = CASE @bitIsUpperDisplay WHEN 1 THEN UPPER(@nvcBaseDataTypeName) ELSE @nvcBaseDataTypeName END;
    
       SET @nvcSuffixDisplayName = (CASE
            WHEN @nvcBaseDataTypeName = N'char' THEN QUOTENAME(RTRIM(CAST(@sntMaxLength AS VARCHAR(4))), N')')
            WHEN @nvcBaseDataTypeName = N'varchar' THEN (CASE WHEN @sntMaxLength = -1 THEN N'(MAX)'  ELSE QUOTENAME(RTRIM(CAST(@sntMaxLength AS VARCHAR(4))), N')') END)
            WHEN @nvcBaseDataTypeName = N'nchar' THEN QUOTENAME(RTRIM(CAST(@sntMaxLength / 2 AS VARCHAR(4))), N')')
            WHEN @nvcBaseDataTypeName = N'nvarchar' THEN (CASE WHEN @sntMaxLength = -1 THEN N'(MAX)'  ELSE QUOTENAME(RTRIM(CAST(@sntMaxLength / 2 AS VARCHAR(4))), N')') END)
            WHEN @nvcBaseDataTypeName = N'binary' THEN QUOTENAME(RTRIM(CAST(@sntMaxLength AS VARCHAR(4))), N')')
            WHEN @nvcBaseDataTypeName = N'varbinary' THEN (CASE WHEN @sntMaxLength = -1 THEN N'(MAX)'  ELSE QUOTENAME(RTRIM(CAST(@sntMaxLength / 2 AS VARCHAR(4))), N')') END)
            WHEN @nvcBaseDataTypeName IN (N'numeric', N'decimal') THEN QUOTENAME(RTRIM(CAST(@tntPrecision AS VARCHAR(4))) + N',' + RTRIM(CAST(@tntScale AS VARCHAR(4))), N')')
            WHEN @nvcBaseDataTypeName IN (N'time', N'datetime2', N'datetimeoffset') THEN QUOTENAME(RTRIM(CAST(@tntScale AS VARCHAR(4))), N')')
            ELSE N'' END);
    
        RETURN @nvcDataTypeName + @nvcBaseDataTypeName + @nvcSuffixDisplayName;
    END
    GO
    

     

    **3、测验效果**


    ** **

    身体力行上边标量函数的来得效果,以下定义若干顾客定义数据类型来注明标量函数dbo.ufn_GetDisplayDataTypeName的效果。

     

    以下准备要注明作用的多少如下:

    CREATE TYPE [dbo].[fd_udt_digest] FROM [NVARCHAR](255) NULL
    GO
    
    CREATE TYPE [dbo].[fd_udt_id] FROM [CHAR](15) NOT NULL
    GO
    
    CREATE TYPE [dbo].[fd_udt_username] FROM [NVARCHAR](20) NULL
    GO
    
    CREATE TYPE [dbo].[UFemail] FROM [VARCHAR](100) NULL
    GO
    
    CREATE TYPE [dbo].[UFFlag] FROM [CHAR](1) NULL
    GO
    
    CREATE TYPE [dbo].[UFhyperlink] FROM [VARCHAR](100) NULL
    GO
    
    CREATE TYPE [dbo].[UFMedia] FROM [IMAGE] NULL
    GO
    
    CREATE TYPE [dbo].[UFreference] FROM [VARCHAR](30) NULL
    GO
    
    CREATE TYPE [dbo].[UFtext] FROM [NTEXT] NULL
    GO
    
    CREATE TYPE [dbo].[UFUID] FROM [UNIQUEIDENTIFIER] NULL
    GO
    
    CREATE TYPE [dbo].[userdecimal] FROM [DECIMAL](28, 6) NOT NULL
    GO
    
    CREATE TYPE [dbo].[udtProduct] AS TABLE 
    (
         ProductID INT NOT NULL
        ,UnitPrice DECIMAL(9, 2) NOT NULL 
        ,Quantity INT NOT NULL
        PRIMARY KEY ([ProductID] ASC)
    )
    GO
    
    CREATE TABLE [dbo].[ScaleDataTypeTable](
        [ColDecimal] [NUMERIC](18, 2) NULL,
        [ColNumeric] [NUMERIC](9, 2) NULL,
        [ColFloat] [FLOAT] NULL,
        [ColReal] [REAL] NULL,
        [ColTime] [TIME](5) NOT NULL,
        [ColDateTime2] [DATETIME2](3) NULL,
        [ColDateTimeOffset] [DATETIMEOFFSET](5) NULL,
        [ColSqlVariant] [SQL_VARIANT] NULL,
        [ColMoney] [MONEY] NULL,
        [ColSmallMoney] [SMALLMONEY] NULL,
        [Col1] [dbo].[fd_udt_digest] NULL,
        [Col2] [dbo].[fd_udt_id] NULL,
        [Col3] [dbo].[fd_udt_username] NULL,
        [Col4] [dbo].[UFemail] NULL,
        [Col5] [dbo].[UFFlag] NULL,
        [Col6] [dbo].[UFhyperlink] NULL,
        [Col7] [dbo].[UFMedia] NULL,
        [Col8] [dbo].[UFreference] NULL,
        [Col9] [dbo].[UFtext] NULL,
        [Col10] [dbo].[UFUID] NULL,
        [Col11] [dbo].[userdecimal] NULL,
        [Col12] HIERARCHYID NULL,
        [Col13] GEOMETRY NULL,
        [Col14] GEOGRAPHY NOT NULL,
        [Col15] CHAR(10) NOT NULL,
        [Col16] VARCHAR(25) NOT NULL,
        [Col16Max] VARCHAR(MAX) NOT NULL,
        [Col17] NCHAR(16) NOT NULL,
        [Col18] NVARCHAR(32) NOT NULL,
        [Col18Max] NVARCHAR(MAX) NOT NULL,
        [ColBigint] BIGINT NOT NULL,
        [ColInt] INT NOT NULL,
        [ColSmallint] INT NOT NULL,
        [ColTinyint] TINYINT NOT NULL,
        [ColBit] BIT NOT NULL,
        [Col19] DECIMAL(9,7) NOT NULL,
        [Col20] MONEY NOT NULL,
        [Col21] SMALLMONEY NOT NULL,
        [Col22] TIMESTAMP NOT NULL,    
        [Col24] UNIQUEIDENTIFIER NOT NULL,
        [Col25] IMAGE NOT NULL,
        [Col26] TEXT NOT NULL,
        [Col27] NTEXT NOT NULL,
        [Col28] BINARY(8) NOT NULL,
        [Col29] VARBINARY(8) NOT NULL,
        [Col29Max] VARBINARY(MAX) NOT NULL,
        [ColMxml] XML NULL,
        [Col30] DATE NOT NULL,
        [Col31] DATETIME NOT NULL,
        [Col32] SMALLDATETIME NOT NULL
    ) ON [PRIMARY];
    
    GO
    
    CREATE TABLE [dbo].[UpdateDataTable]
    (
        UpdateDataTableId INT NOT NULL,
        [Col23] ROWVERSION NOT NULL,
        [Colname] sysname NOT NULL
    ) ON [PRIMARY];
    GO
    

     

    主导数据类型小写体现的作用的T-SQL代码和法力截图如下:

    SELECT 
         T2.[name] AS [table_name]
        ,[T1].[name] AS [column_name]
        ,TYPE_NAME([T1].[user_type_id]) AS [column_datatype]
        ,[dbo].[ufn_GetDisplayDataTypeName]([T1].[user_type_id], [T1].[max_length], [T1].[precision], [T1].[scale], 0) AS [column_display_datatype]
        ,[T1].[max_length]
        ,[T1].[precision]
        ,[T1].[scale]
    
    FROM 
        [sys].[all_columns] AS T1
        INNER JOIN [sys].[all_objects] AS T2
            ON [T1].[object_id] = [T2].[object_id]
    WHERE 
        [T2].[name] IN (N'ScaleDataTypeTable', N'UpdateDataTable')
        --AND EXISTS (SELECT 1 FROM [sys].[types] WHERE ([name] = N'sysname' OR [is_user_defined] = 1) AND [user_type_id] = [T1].[user_type_id]);
    GO
    

     

    威尼斯官方网站 5

     

    着力数据类型大写展示的功能的T-SQL代码和功能截图如下:

    SELECT 
         T2.[name] AS [table_name]
        ,[T1].[name] AS [column_name]
        ,TYPE_NAME([T1].[user_type_id]) AS [column_datatype]
        ,[dbo].[ufn_GetDisplayDataTypeName]([T1].[user_type_id], [T1].[max_length], [T1].[precision], [T1].[scale], 1) AS [column_display_datatype]
        ,[T1].[max_length]
        ,[T1].[precision]
        ,[T1].[scale]
    
    FROM 
        [sys].[all_columns] AS T1
        INNER JOIN [sys].[all_objects] AS T2
            ON [T1].[object_id] = [T2].[object_id]
    WHERE 
        [T2].[name] IN (N'ScaleDataTypeTable', N'UpdateDataTable')
        --AND EXISTS (SELECT 1 FROM [sys].[types] WHERE ([name] = N'sysname' OR [is_user_defined] = 1) AND [user_type_id] = [T1].[user_type_id]);
    GO
    

     

    威尼斯官方网站 6

    威尼斯官方网站 7 

    **4、总结语
    **

     

    这些作用刚带头和睦行使了2个标量函数,针对sys.types每一次查询最多调用伍遍;第二本子则集中到叁个标量函数中,依然针对sys.types每一回查询最多调用4次;第三版则重构和优化为sys.types每一趟查询最多2次;第4版本继续重构代码将函数再次来到的结果分为多少个部分的集结,那样重构更简单明了;最终意气风发版本扩充了针对中央数据类型的尺寸写功用。

     

    都在说代码重构,那么些效果的兑现自己真正心获得了重商谈优化的功能,以上七个本子下来,有实在感到到实在做好黄金年代件业务真的要过得硬的思辨和开头试行的,不然超轻巧要么头脑愚笨要么好高骛远端不佳的习贯养成的。近期一向在看数据库和商业智能方便的数据集,更验证了明白的越来越多,不驾驭和急切想打听的就越多。怎么着将舌战越来越好的教导施行以致实行越来越好的申明理论的可行性,须求越多的努力。

     

    用尽全力必要本人周周起码爆发龙活虎篇博文和名门一齐探究学习发展。纵然自个儿也在转载和笔录专门的学问中恐怕本身动手实施的东西,一时候真的以为日子稍稍远远不足用,需求越来越多的搜查缉获别的卓越人士的本事和辩护,才干严峻的写下团结的所思所想,假设不周或回味不科学的地点也请各位海涵。近来学习到的东西太多,才察觉此前发布的的东西有不正确的地点,稳步地自个儿遵照现存的回味来改良。

     

    **5、参谋项目清单列表**


    无。

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:威尼斯官方网站5、参谋项目清单列表

    关键词: