仓酷云

标题: 在sql server中打印九九乘法表 [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-16 14:07
标题: 在sql server中打印九九乘法表
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。明天在csdn上看到几位伴侣写的使用sql语句打印九九乘法表的体例,对照成心思。
办法一:
declare@xint
set@x=1
declare@yint
declare@cvarchar(8000)

while(@x<=9)
begin
select@y=1,@c=
while(@y<=@x)
begin
select@c=@c+cast(@yasvarchar)+*+cast(@xasvarchar)+=+cast(@x*@yasvarchar)+
set@y=@y+1
end
print@c+char(10)
set@x=@x+1
end

这个办法打印出来的效果以下:
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
1*5=52*5=103*5=154*5=205*5=25
1*6=62*6=123*6=184*6=245*6=306*6=36
1*7=72*7=143*7=214*7=285*7=356*7=427*7=49
1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81

办法二:
select
max(casewhena>0then1*+a+=+ltrim(a*1)end)[1],
max(casewhena>1then2*+a+=+ltrim(a*2)end)[2],
max(casewhena>2then3*+a+=+ltrim(a*3)end)[3],
max(casewhena>3then4*+a+=+ltrim(a*4)end)[4],
max(casewhena>4then5*+a+=+ltrim(a*5)end)[5],
max(casewhena>5then6*+a+=+ltrim(a*6)end)[6],
max(casewhena>6then7*+a+=+ltrim(a*7)end)[7],
max(casewhena>7then8*+a+=+ltrim(a*8)end)[8],
max(casewhena>8then9*+a+=+ltrim(a*9)end)[9]
from
(
selectltrim(number)afrommaster..spt_values
wheretype=pandnumberbetween1and9
)tgroupbya

这个sql查询的了局为:
1*1=1        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
1*2=2        2*2=4        NULL        NULL        NULL        NULL        NULL        NULL        NULL
1*3=3        2*3=6        3*3=9        NULL        NULL        NULL        NULL        NULL        NULL
1*4=4        2*4=8        3*4=12        4*4=16        NULL        NULL        NULL        NULL        NULL
1*5=5        2*5=10        3*5=15        4*5=20        5*5=25        NULL        NULL        NULL        NULL
1*6=6        2*6=12        3*6=18        4*6=24        5*6=30        6*6=36        NULL        NULL        NULL
1*7=7        2*7=14        3*7=21        4*7=28        5*7=35        6*7=42        7*7=49        NULL        NULL
1*8=8        2*8=16        3*8=24        4*8=32        5*8=40        6*8=48        7*8=56        8*8=64        NULL
1*9=9        2*9=18        3*9=27        4*9=36        5*9=45        6*9=54        7*9=63        8*9=72        9*9=81

使用C#完成能够参考本站:使用C#完成九九乘法表有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。
作者: 再见西城    时间: 2015-1-18 12:01
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 深爱那片海    时间: 2015-1-25 10:14
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
作者: admin    时间: 2015-2-2 21:50
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
作者: 冷月葬花魂    时间: 2015-2-8 07:49
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
作者: 金色的骷髅    时间: 2015-2-25 02:20
原来公司用过MYSQL自己也只是建个表写个SQL
作者: 分手快乐    时间: 2015-3-7 16:25
大家注意一点。如下面的例子:
作者: 第二个灵魂    时间: 2015-3-15 09:37
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者: 若相依    时间: 2015-3-22 00:24
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2