萌萌妈妈 发表于 2015-1-16 22:36:08

MSSQL教程之T-SQL Extractor

Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
/******************************************************************************
*Author:iret
*Desc:T-SQLExtractor
*ExtractthecommentsandblanksandtabsfromtheSQLstatement
*为了对照两个存储历程,大概SQL语句是不是分歧,抽暇写了一个能够删除T-SQL语句中的正文和空格的剧本,挺精巧的模样。
*CreatedDate:2004/10/21
******************************************************************************/

DECLARE@scriptVARCHAR(8000),@extractedScriptVARCHAR(4000)
SET@script=
/*从体系表猎取存储历程的剧本*/
SELECT@script=@script+
FROMsyscomments,sysobjects
WHERE
syscomments.=sysobjects.ANDsysobjects.LIKE%campa_AppSegment

/*标记符*/
DECLARE@InLineCommentedBIT,@InSectionCommentedBIT,@InStringBIT,@positionINT

/*以后字符*/
DECLARE@curCharINT

/*前一个字符*/
DECLARE@preCharINT

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=0AND@InString=0
BEGIN
--SETthesigninsectioncomment
SET@InSectionCommented=1

--popthe/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=0AND@InString=0
BEGIN
SET@InSectionCommented=0
SET@preChar=@curChar
SET@position=@position+1
CONTINUE
END

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

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

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

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

IF@inString=1AND@curChar=ASCII()
BEGIN
IFASCII(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
--ifmeetstheendofthelinesettheInLineCommentedtofalse
IF@curChar=10AND@preChar=13
BEGIN
SET@InLineCommented=0
END

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

IF@curChar=ASCII()OR@curChar=10OR@curChar=13OR@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

--printtheresultscript
SELECT@extractedScript






如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。

愤怒的大鸟 发表于 2015-1-19 18:04:24

呵呵,这就是偶想说的

爱飞 发表于 2015-1-27 05:16:11

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

金色的骷髅 发表于 2015-2-5 01:22:56

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

小女巫 发表于 2015-2-11 00:29:42

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

海妖 发表于 2015-3-10 22:13:12

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

不帅 发表于 2015-3-17 11:10:57

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

小魔女 发表于 2015-3-24 08:52:52

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
页: [1]
查看完整版本: MSSQL教程之T-SQL Extractor