|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功你有一个内里包括整数、浮点数、金额或日期的N列SQLServer表,而你的义务是前往这些列中某一行的最年夜值。你乃至被请求一次求几行的最年夜值,前往一个纪录组(recordset)。
第一个义务表示你大概事后不晓得要对照哪一列或对照几列,但现实并不是老是云云。大概你恰好晓得你要对照哪些列,而且晓得不成能增添任何新列。另外一方面,你大概必需做好防备企图,估计到大概会增添一些新列。写一个恰好对照N个值的函数能够完成这个义务,但它在别的情形下又有多年夜用途呢?
假定上面是你的表:
CREATETABLE[dbo].[MinMax](
[MinMaxID][int]IDENTITY(1,1)NOTNULL,
[Value1][int]NULL,
[Value2][int]NULL,
[Value3][int]NULL,
[Value4][int]NULL,
CONSTRAINT[PK_MinMax]PRIMARYKEYCLUSTERED
(
[MinMaxID]ASC
)WITH(PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
注重,表界说同意在它的四个列中利用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。
你大概已编写了一个恰好只承受四个参数的函数,但如许的函数过于特别,不克不及在别的情形下利用。花一点工夫思索更广泛的情形,你将会失掉加倍有效的函数。
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。 |
|