仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1042|回复: 8
打印 上一主题 下一主题

[学习教程] 在sql server中打印九九乘法表

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
先说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:50 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
深爱那片海 该用户已被删除
板凳
发表于 2015-1-25 10:14:04 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
admin 该用户已被删除
地板
发表于 2015-2-2 21:50:58 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-8 07:49:40 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-25 02:20:48 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
分手快乐 该用户已被删除
7#
发表于 2015-3-7 16:25:54 | 只看该作者
大家注意一点。如下面的例子:
第二个灵魂 该用户已被删除
8#
发表于 2015-3-15 09:37:40 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
若相依 该用户已被删除
9#
发表于 2015-3-22 00:24:21 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-3 19:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表