转至繁体中文版     | 网站首页 | 文章中心 | 下载中心 | 图片中心 | 笑话频道 | 教程频道 | 会员中心 | 雁过留声 | 
最新公告:     "MinTao学以致用网"欢迎您的光临,你的支持便是我们的动力,欢迎广大网友和各界人士亲临指导,你们的一个小小的建议便是我们发展的开路石!  [MinTao  2007年9月5日]        
您现在的位置: MinTao学以致用网 >> 文章中心 >> 电子课堂 >> 数据库 >> Sql Server >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
求日期所属星座的 T-SQL
用于执行(计算) 字符串表
Building a T-SQL Loop
T-SQL: 读取磁盘文件
T-SQL 存储过程创建 PDF
T-SQL 查询中使用的函数
T-SQL 生成 两个新的真正
浅谈SQL SERVER 2000 T-
更多内容
T-SQL Extractor         
T-SQL Extractor
作者:iret 文章来源:不详 点击数: 更新时间:2007-11-14 12:55:21

/******************************************************************************
 * Author: iret
 * Desc: T-SQL Extractor
 *           Extract the comments and blanks and tabs from the SQL statement
 * 为了比较两个存储过程,或者SQL语句是否一致,抽空写了一个可以删除T-SQL 语句中的注释和空格的脚本,挺精致的样子。
 * Created Date: 2004/10/21
 ******************************************************************************/

DECLARE @script VARCHAR(8000), @extractedScript VARCHAR(4000)
SET @script = ''''''''
/*从系统表获取存储过程的脚本*/
SELECT @script = @script + [text]
FROM syscomments, sysobjects
WHERE
    syscomments.[id] = sysobjects.[id] AND sysobjects.[name] LIKE ''''%campa_AppSegment''''

/*标志符*/
DECLARE @InLineCommented BIT, @InSectionCommented BIT, @InString BIT, @position INT

/*当前字符*/
DECLARE @curChar INT

/*前一个字符*/
DECLARE @preChar INT

SET @InLineCommented = 0
SET @InSectionCommented = 0
SET @InString = 0

SET @extractedScript = ''''''''
SET @position = 1
SET @preChar = null

WHILE @position <= DATALENGTH(@script)
BEGIN
    --获取当前字符
    SET @curChar = ASCII(SUBSTRING(@script, @position, 1))
    IF @preChar = ASCII(''''/'''') AND @curChar = ASCII(''''*'''') AND @InLineCommented = 0 AND @InString = 0
    BEGIN
        -- SET the sign in section comment
        SET @InSectionCommented = 1

         --pop the / char
         SET @extractedScript = substring(@extractedScript,1,len(@extractedScript)-1)

         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    IF @preChar = ASCII(''''*'''') AND @curChar = ASCII(''''/'''') AND @InLineCommented = 0 AND @InString = 0
    BEGIN
         SET @InSectionCommented = 0
         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    IF @preChar = ASCII(''''-'''') AND @curChar = ASCII(''''-'''') AND @InSectionCommented = 0 AND @InString = 0
    BEGIN
         SET @InLineCommented = 1

         --pop the / char
         SET @extractedScript = substring(@extractedScript,1,len(@extractedScript)-1)

         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    IF @curChar = ASCII('''''''''''''''') AND @InString = 0 AND @InSectionCommented = 0 AND @InLineCommented = 0
    BEGIN
         SET @InString = 1
    END

    IF @inString = 1 AND @curChar = ASCII('''''''''''''''')
    BEGIN
         IF ASCII(SUBSTRING(@script, @position+1, 1))= ASCII('''''''''''''''')
         BEGIN  
              SET @extractedScript = @extractedScript + ''''''''''''''''
              SET @position = @position + 1
        END
        ELSE
         BEGIN
              SET @InString = 0  
         END
    END

    IF @InSectionCommented = 1
    BEGIN
         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    IF @InLineCommented = 1
    BEGIN
        -- if meets the end of the line set the InLineCommented to false
        IF @curChar = 10 AND @preChar = 13
        BEGIN
           SET @InLineCommented = 0
        END

         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    IF @curChar = ASCII('''' '''') OR @curChar = 10 OR @curChar =13 OR @curChar = ASCII('''' '''') OR @curChar = 32
    BEGIN
         SET @preChar = @curChar
         SET @position = @position + 1
         CONTINUE
    END

    SET @extractedScript = @extractedScript + CHAR(@curChar)
    SET @preChar = @curChar
    SET @position = @position + 1
END

-- print the result script
SELECT @extractedScript

 

 

 

文章录入:mintao    责任编辑:mintao 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007 MinTao学以致用网(www.mintao.net) Inc All Rights Reserved.
    QQ:543098146有事请Q我! QQ:261561092有事请Q我 QQ:179647303有事请Q我 MSN:min906@126.com
    站长:MinTao 信息产业部ICP备案号:鄂ICP备07500065号

    学以致用是我们学习者的至高境界和不懈追求,[MinTao学以致用网]与大家共同学习,共同进步……
    信息产业部备案
    *鄂ICP备07500065号