如何书写优雅、漂亮的SQL脚本?

原文地址为: 如何书写优雅、漂亮的SQL脚本?

本篇来聊聊 如何书写漂亮、整洁、优雅的 SQL 脚本,下面这些是我个人总结、整理出来的。姑且做个抛砖引玉吧,呵呵,欢迎大家一起来讨论。

我们首先来看看一段创建数据表的脚本(如下所示),你是否觉得有什么不妥或是不足呢?如果是你,你怎样书写呢?
961ddebeb323a10fe0623af514929fc1.jpe 代码
CREATE   TABLE   [ dbo ] . [ TableDataDictionary ] (
    
[ TableID ]   [ int ]   IDENTITY ( 1 , 1 NOT   NULL ,
    
[ IpAddress ]   [ nvarchar ] ( 15 NOT   NULL ,
    
[ DataBaseName ]   [ nvarchar ] ( 35 NOT   NULL ,
    
[ TableName ]   [ nvarchar ] ( 35 NOT   NULL ,
    
[ Description ]   [ nvarchar ] ( 150 NULL ,
 
CONSTRAINT   [ PK_TableDataDictionary ]   PRIMARY   KEY ( [ Tableid ] )
)

 

 

可能你也没有觉得它有什么不妥,因为你一直都是这样书写哦。而且更混乱、更杂的的脚本你也见过,也可能习惯了;那么来看看下面的脚本,

961ddebeb323a10fe0623af514929fc1.jpe 代码
USE   [ Test ] ;
GO

IF   OBJECT_ID (N ' TableDataDictionary ' IS   NULL  
    
CREATE   TABLE   [ dbo ] . [ TableDataDictionary ]
    (
        
[ TableID ]              INT   IDENTITY ( 1 , 1 )   NOT   NULL ,
        
[ IpAddress ]            NVARCHAR ( 15 )        NOT   NULL ,
        
[ DataBaseName ]         NVARCHAR ( 35 )        NOT   NULL ,
        
[ TableName ]            NVARCHAR ( 35 )        NOT   NULL ,
        
[ Description ]          NVARCHAR ( 150 )       NULL ,
        
CONSTRAINT   [ PK_TableDataDictionary ]   PRIMARY   KEY ( [ Tableid ] )
    );
ELSE
    
PRINT   ' This table have been exist in database ' ;
GO

 

 上面两段脚本比起来,你是否觉得下面的更美观、优雅呢?

 

接下来我们来看看四段申明变量的脚本,自己可以对比 

961ddebeb323a10fe0623af514929fc1.jpe 代码
         (一)
DECLARE   @PayType   VARCHAR ( 50 ),   @Rate   FLOAT @FeeRate   FLOAT  , @OtheFee   FLOAT ;
DECLARE   @StartDate   DATETIME ,    @EndDate   DATETIME ;
DECLARE   @CmdSql   NVARCHAR ( MAX );
DECLARE   @MyCardBillFee   FLOAT @MyCardFee      FLOAT ;
-- -------------------------------------------------------------------------------------------------------

                                (二)
DECLARE   @PayType   VARCHAR ( 50 );
DECLARE   @Rate   FLOAT ;
DECLARE   @FeeRate   FLOAT ;
DECLARE   @OtheFee   FLOAT ;
DECLARE   @StartDate   DATETIME ;
DECLARE   @EndDate   DATETIME ;
DECLARE   @CmdSql   NVARCHAR ( MAX );
DECLARE   @MyCardBillFee   FLOAT ;
DECLARE   @MyCardFee      FLOAT ;
-- -------------------------------------------------------------------------------------------------------
                            
                            (三)

DECLARE   @PayType           VARCHAR ( 50 );               -- 支付类型
DECLARE   @Rate              FLOAT ;                     -- 汇率比例
DECLARE   @FeeRate           FLOAT ;                     -- 手续费比例
DECLARE   @MyCardFee         FLOAT ;                     -- ......
DECLARE   @OtheFee           FLOAT ;                     -- ......
DECLARE   @MyCardBillFee     FLOAT ;                     -- ......
DECLARE   @StartDate         DATETIME ;                  -- ......
DECLARE   @EndDate           DATETIME ;                  -- ......
DECLARE   @CmdSql            NVARCHAR ( MAX );             -- ......
--
-------------------------------------------------------------------------------------------------------

                          (四)
DECLARE  
    
@PayType           AS      VARCHAR ( 50 );             -- 支付类型
     @Rate              AS      FLOAT ;                   -- 汇率比例
     @FeeRate           AS      FLOAT ;                   -- 手续费比例
     @MyCardFee         AS      FLOAT ;                   -- ......
     @OtheFee           AS      FLOAT ;                   -- ......
     @MyCardBillFee     AS      FLOAT ;                   -- ......
     @StartDate        AS      DATETIME ;               - - ......
     @EndDate           AS      DATETIME ;                -- ......
     @CmdSql            AS      NVARCHAR ( MAX );           -- ......
--
-----------------------------------------------------------------------------------------------------

 

 

如果是你,你愿意运用哪种书写格式呢? 个人觉得(一)写得极极糟糕,不仅阅读不方便、而且也不方便注视。(二)则是我以前习惯书写的格式,一来没有注视、二来看起来没有(三)、(四)美观、大方。



存储过程、函数头部注视的样式(个人曾今用过的样式): 

 961ddebeb323a10fe0623af514929fc1.jpe代码

        (一)

-- =============================================================================================================
--
            Function         :            dbo.USP_GetEmployeById 按Id获取雇员信息
--
            Auhtor            :            Kerry
--
            Create Date       :            2010-08-12
--
            Description       :            详细描述存储过程功能(对Function 功能补充)、以及参数、输出结果的描述
--
=============================================================================================================
--
            2010-08-12        :           修改....增加........
--
            2010-08-13        :            修改....增加.......
--
=============================================================================================================
                            

Function   简要描述存储过程、函数功能。 
Desctiption 详细描述存储过程、函数功能,以及参数、输出结果描述


                            (二)

-- =============================================================================================================
--
        Create Date            :        2010-08-11
--
        Author                 :        Kerry
--
        Modified Date          :        2010-08-12
--
        Modified Content       :        修改表字段、增加汇率计算.....
--
        Modified Date          :        2010-08-13
--
        Modified Content       :        修改表字段、增加汇率计算.....
--
        Description            :        计算抢车位社区游戏的月充值结构信息。    
--
=============================================================================================================


                            (三)
/* *************************************************************************************************************
        Auhtor                 :            Kerry
        Create Date            :            2010-08-12
        Modified Date          :
        Modified Content       :
        Description            :            如何书写漂亮、优雅的SQL脚本
*************************************************************************************************************
*/


                           ( 四)
--  =============================================
--
 Author:        <Author,,Name>
--
 Create date: <Create Date,,>
--
 Description:    <Description,,>
--
 =============================================

使用MSSMS新建存储过程,它自动生成的样式 

 




个人觉得(一) >= (二) > (三) > (四) ,不知道大家有没有更好的格式推荐。



下面看看这样一段脚本,一眼就觉得有点糟糕,其实实际开发中脚本比这个可能复杂得多,头痛吧

961ddebeb323a10fe0623af514929fc1.jpe 代码
select  PermissionID  from   Permission  where  resourceid =
select   top   1  resourceid  from   [ Resource ]   where  resourcename = @resourcename and  
actionid
= ( select   top   1  actionid  from   [ Action ]   where  actionname = @actionname )
AND  SchemaId  in  ( SELECT  SchemaId  FROM  dbo.BindToSchema  WHERE  DcUserID = @UserID )    

 

首先就应该统一关键字大小写,不要一部分大写、一部分小写。然后从结构上面调整。 可能每个人的审美观、习惯的格式不同,这个无所谓,也没有必要统一。 但是你书写出来的脚本至少要结构清晰,一目了然。不要让别人费很大的劲去调整格式,然后才能理解它的逻辑,如果写出上面或是比上面更糟糕的脚本,我想项目经理真应该教训教训你。这样只会给后来维护的人痛苦不堪(实际开发中可能比这糟糕十倍呢,想必很多人是深受其害啊) 

961ddebeb323a10fe0623af514929fc1.jpe 代码
SELECT  Permission  FROM   Permission
 
WHERE  
     resourceid 
= SELECT   TOP   1  resourceid  FROM   [ Resource ]   WHERE  resourcename = @resourcename
    
AND  actionid  = ( SELECT   TOP   1  actionid  FROM   [ Action ]   WHERE  actionname = @actionname )
    
AND  SchemaId  IN  ( SELECT  SchemaId  FROM  dbo.DcUserBindToSchema  WHERE  DcUserID = @UserID )

 


动态组合语句是否让你的脚本看起来林乱不堪啊,你有没有试过让其在某些方面看起来美观点、优雅点啊、

 961ddebeb323a10fe0623af514929fc1.jpe代码

' SELECT   Order_ID = @OrderID, CampaignCode= @CampaignCode, ProductCode = @ProductCode, StartDate= SpotDate,  
   EndDate = EndDate, StartTime= Media_StartTime, EndTime = Media_EndTime, Duration = (CASE WHEN Media_Duration IS NULL OR  
 ELSE Media_Duration END), Adformat= Media_Adformat , Color = Media_Color ,  --Media_Showing,                                          Size   = Media_Size, SpotType  = Media_SpotType, URL = Media_URL  , ScheduleNo   = ScheduleNo , 
   Plan_Insertion_ID  = Plan_Insertion_ID  


那下面书写格式是不是美观、整洁些呢
  
SELECT   
  Order_ID          = @OrderID  
, CampaignCode      = @CampaignCode  
, ProductCode       = @ProductCode  
, StartDate         = SpotDate  
, EndDate           = EndDate  
, StartTime         = Media_StartTime  
, EndTime           = Media_EndTime    
, Adformat          = Media_Adformat                                       
, Color             = Media_Color  
, Impression        = Media_Impression                                     
, Location          = Media_Location                                       
, Material          = Media_Material                                       
, Position          = Media_Position                                       
, Program           = Media_Program                                        
, Scale             = Media_Scale          --Media_Showing                                        
, Size              = Media_Size                                           
, SpotType          = Media_SpotType                                    
, URL               = Media_URL  
, ScheduleNo        = ScheduleNo  
, Plan_Insertion_ID = Plan_Insertion_ID  
, Position = Media_Position

'

 

 

怎么样是否觉得下面的”清新脱俗“,眼前一亮啊,呵呵,不是在说美女啊。看看我以前一个同事写的吧,我只截取了一部分。

 



写着觉得有点天马行空、不着边际了,其实这个话题有点大,而且和个人习惯、审美观有莫大联系,所谓众口难调,不过有几点应该是一致的:

1:书写脚本的时候,多用空格、Tab键,不要让代码拥挤,杂糅在一起。

2:让代码看起来觉得舒服,一目了然,不要一看就觉得头痛,要细细看上好久,才了解逻辑结构

3:让代码看起来整洁、优美。凌乱不堪是大忌。

4:总结、学习一些书写漂亮的格式。 

 

限于篇幅,下面给出一些我见过的、写的比较优雅的脚本,大家也可以贴出自己写得优美的代码,一起学习探讨。

 

961ddebeb323a10fe0623af514929fc1.jpe 代码
--  Construct column list
SET   @sql   =
  N
' SET @result =  '                                      +   @newline   +
  N
'   STUFF( '                                            +   @newline   +
  N
'     (SELECT N '' , ''  +  '
           
+  N ' QUOTENAME(pivot_col) AS [text()] '         +   @newline   +
  N
'      FROM (SELECT DISTINCT( '
           
+   @on_cols   +  N ' ) AS pivot_col '                +   @newline   +
  N
'            FROM '   +   @query   +  N ' ) AS DistinctCols '     +   @newline   +
  N
'      ORDER BY pivot_col '                             +   @newline   +
  N
'      FOR XML PATH( '''' )), '                           +   @newline   +
  N
'     1, 1, N '''' ); '

EXEC  sp_executesql
  
@stmt     =   @sql ,
  
@params   =  N ' @result AS NVARCHAR(MAX) OUTPUT ' ,
  
@result   =   @cols  OUTPUT;

--  Create the PIVOT query
SET   @sql   =
  N
' SELECT * '                                             +   @newline   +
  N
' FROM '                                                 +   @newline   +
  N
'   ( SELECT  '                                          +   @newline   +
  N
'        '   +   @on_rows   +  N ' , '                             +   @newline   +
  N
'        '   +   @on_cols   +  N '  AS pivot_col, '                +   @newline   +
  N
'        '   +   @agg_col   +  N '  AS agg_col '                   +   @newline   +
  N
'     FROM  '                                            +   @newline   +
  N
'        '   +   @query                                      +   @newline   +
  N
'   ) AS PivotInput '                                    +   @newline   +
  N
'   PIVOT '                                              +   @newline   +
  N
'     (  '   +   @agg_func   +  N ' (agg_col) '                    +   @newline   +
  N
'       FOR pivot_col '                                  +   @newline   +
  N
'         IN( '   +   @cols   +  N ' ) '                           +   @newline   +
  N
'     ) AS PivotOutput; '


 

 

 

 961ddebeb323a10fe0623af514929fc1.jpe代码

DECLARE
  
@schemaname   AS   NVARCHAR ( 128 ),
  
@tablename    AS   NVARCHAR ( 128 ),
  
@colname      AS   NVARCHAR ( 128 ),
  
@sql          AS   NVARCHAR ( 805 );

SET   @schemaname   =  N ' dbo ' ;
SET   @tablename    =  N ' Orders ' ;
SET   @colname      =  N ' CustomerID ' ;
SET   @sql   =  N ' SELECT COUNT(DISTINCT  '
  
+   QUOTENAME ( @colname +  N ' ) FROM  '
  
+   QUOTENAME ( @schemaname )
  
+  N ' . '
  
+   QUOTENAME ( @tablename )
  
+  N ' ; ' ;

EXEC ( @sql );

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


转载请注明本文地址: 如何书写优雅、漂亮的SQL脚本?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷序列号码为 00000030 4489:1826 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET DATEFORMAT对日期处理的影响.sql │ │ 2.3.4 SET LANGUAGE对日期处理的影响示例.sql │ │ 2.4.1 日期格式化处理.sql │ │ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数.sql │ │ 3.4.2 分段更新函数.sql │ │ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ │ 3.5.3 字符串分拆并统计的处理示例.sql │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │ │ │ └─其他 │ varbinary转换成字符串.sql │ 关键字搜索.sql │ 分解公式.sql │ 字符串分拆--格式化.sql │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │ │ │ └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例.sql │ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号的示例.sql │ │ 5.2.2 使用编号表按日期生成流水号的示例.sql │ │ 5.2.2 使用编号表生成流水号的示例.sql │ │ 5.2.3 生成纯字母随机编号的示例(仅大小或者小写).sql │ │ 5.2.3 生成纯字母随机编号的示例(大小写混合).sql │ │ 5.2.3 生成纯数字随机编号的示例.sql │ │ 5.3.2 融合了补号处理的编号生成处理示例.sql │ │ 5.3.3 使用UPDATE进行编号重排的处理示例.sql │ │ 5.3.3 使用临时表进行编号重排的处理示例.sql │ │ 5.3.3 使用子查询进行编号重排的处理示例.sql │ │ 5.3.3 名次查询的处理示例.sql │ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └─其他 │ -补位法.sql │ 以另一个表的字段做默认值.sql │ 以另一表的字段生成编号.sql │ 关联部门流水号.sql │ 十六进制.sql │ 学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql │ 类别自动生成编号示例.sql │ 自已做标识列的例子.sql │ 触发器自动维护已用&未用编号.sql │ 连续编号.sql │ 防止重复的示例.sql │ 项目编号=各项目独立流水号&各年不同.sql │ ├─第06章 │ │ 6.1.1 NULL对IN的查询的影响及解决示例.sql │ │ 6.1.2 各种联接的使用示例.sql │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列标题处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例.sql │ │ 6.2.1 UNION ALL实现的分级汇总示例.sql │ │ 6.3.1 简单的交叉报表处理示例.sql │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行值动态变化的交叉报表处理示例(转换多列).sql │ │ 6.3.3 行值动态变化的交叉报表处理示例.sql │ │ 6.3.4 化解字符串不能超过8000的方法.sql │ │ 6.3.5 特殊的交叉报表处理示例.sql │ │ 6.4.1 库存明细帐处理示例(包含结存数).sql │ │ 6.4.1 库存明细帐处理示例.sql │ │ 6.4.2 同期及上期数据对比处理示例.sql │ │ 6.4.3 动态分组处理示例.sql │ │ 6.4.4 排行榜处理示例.sql │ │ │ └─其他 │ 交叉表--复杂名次.sql │ 交叉表-优先级处理.sql │ 交叉表分析.sql │ 分级汇总.sql │ 分组交叉表.sql │ 列转行.sql │ 固定行列报表.sql复杂交叉表.sql复杂交叉表1.sql │ 多栏显示.sql │ 日期+星期+时间.sql │ 格式化报表.sql │ 横转竖-1.sql │ 横转竖-字段名.sql │ 横转竖-生成字段名.sql │ 横转竖.sql │ 行列互换的复杂交叉表.sql │ 限制列数的交叉表.sql │ ├─第07章 │ │ 7.1 splitpage.asp │ │ 7.2.1 TOP n 实现的通用分页存储过程.sql │ │ 7.2.2 字符串缓存实现的通用分页存储过程.sql │ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ │ │ └─其他 │ sp_cursor.sql │ 基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则调整处理的通用存储过程.sql │ │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据广度排序处理示例.sql │ │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父节点的示例函数.sql │ │ 8.2.5 校验插入指定结点是否导致编码循环的示例函数.sql │ │ 8.2.5 校验表中数据是否有循环编码的通用存储过程.sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例.sql │ │ 8.2.7 实现删除指定结点及所有子节点的处理触发器.sql │ │ 8.2.8 逐级汇总示例(循环逐级累计法).sql │ │ 8.2.8 逐级汇总示例(用户定义函数法).sql │ │ 8.3.1 产品配件清单查询示例.sql │ │ 8.3.2 最短乘车路线查询示例.sql │ │ │ └─其他 │ xml菜单.sql │ 宝塔形数据的处理-1.sql │ 宝塔形数据的处理.sql │ 树形数据生成xml.sql │ ├─第09章 │ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql │ bcp-数据导入导出-二进制文件.sql │ bcp-数据导出为文件.sql │ bcp表数据存为XML.sqlSQL Server到Oracle连接服务器的实现.sqlSQL Server到SQLBASE连接服务器的实现.sqlSQL Server到SYBASE连接服务器的实现.sqlsql导出mysql.sql │ textcopy实现文件存取.sql │ Vb程序实现文件存取.sql │ 导入文本文件时如何指定字段类型.sql │ 导出northwind中Employees的图像.sql │ 将某个目录上的Excel表,导入到数据库中.sql │ 数据导入导出基本方法.sql │ 用ASP上传&下载文件.sql

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值