小妖女 发表于 2015-1-16 22:17:53

MSSQL教程之断定几个SQL Server栏中的最年夜值

mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功你有一个内里包括整数、浮点数、金额或日期的N列SQLServer表,而你的义务是前往这些列中某一行的最年夜值。你乃至被请求一次求几行的最年夜值,前往一个纪录组(recordset)。
第一个义务表示你大概事后不晓得要对照哪一列或对照几列,但现实并不是老是云云。大概你恰好晓得你要对照哪些列,而且晓得不成能增添任何新列。另外一方面,你大概必需做好防备企图,估计到大概会增添一些新列。写一个恰好对照N个值的函数能够完成这个义务,但它在别的情形下又有多年夜用途呢?
假定上面是你的表:
CREATETABLE.(
IDENTITY(1,1)NOTNULL,
NULL,
NULL,
NULL,
NULL,
CONSTRAINTPRIMARYKEYCLUSTERED
(
ASC
)WITH(PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF)ON
)ON
注重,表界说同意在它的四个列中利用NULL值。在年夜多半情形下,我会只管使用非NULL列,但在这类情形下,一个或几个日期列中很有大概包括NULL值;我固然不但愿仅仅为了回避非NULL成绩而输出毛病的数据。因而我把一切日期列界说为NULL列。给出了一些你能够拔出表中的样本值。
关于复杂Min()和Max()函数的感化,SQL有它本人的划定,即对照一个列中的值。既然没有内置函数来对照任何两个值并断定最年夜或最小值,你应当自行编写这类函数。我决意把它们叫做Min2()和Max2()。见列表A。
你能够用这个代码对它们举行测试:
SELECTdbo.Min2(23,34)
SELECTdbo.Max2(23,NULL)
SELECTdbo.Min2(NULL,34)
SELECTdbo.Max2(23,NULL)
要对照原始表中的值,你能够复杂地嵌进函数挪用,就像如许:
SELECTdbo.Max2(Value1,dbo.Max2(Value2,dbo.Max2(Value3,Value4)))
FROMdbo.MinMax
依据原始表,这个挪用的了局以下:
7
10
27
81
仍是有一个成绩:下面的代码把NULL转换成0。在Min2()函数中,这意味着假如有自变量为NULL值,则前往了局为0。在多半情形下,我以为如许做是得当的,但在一些特别情形下,你大概但愿前往NULL而不是0。
你大概已编写了一个恰好只承受四个参数的函数,但如许的函数过于特别,不克不及在别的情形下利用。花一点工夫思索更广泛的情形,你将会失掉加倍有效的函数。

因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。

灵魂腐蚀 发表于 2015-1-19 06:53:57

比如日志传送、比如集群。。。

山那边是海 发表于 2015-1-27 06:09:27

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

精灵巫婆 发表于 2015-2-5 03:56:29

总感觉自己还是不会SQL

海妖 发表于 2015-3-1 21:24:35

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

金色的骷髅 发表于 2015-3-11 00:19:26

我们学到了什么?思考问题的时候从表的角度来思考问

飘飘悠悠 发表于 2015-3-17 17:03:47

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

小女巫 发表于 2015-3-24 14:28:37

SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
页: [1]
查看完整版本: MSSQL教程之断定几个SQL Server栏中的最年夜值