java,php,asp.net,linux,javascript,mysql,mssql,oracle,编程
java编程
java编程
sql版 魔方算法
有1-16的数字
在SQL中输出
输出的样式是
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
create
procedure
sp_Test
@n int
as
begin
declare
@layer int, @width int, @spaces varchar(16)
--维度,元素宽度,元素前导空格
set
@layer=
sqrt
(@n)
if
@layer*@layer<>@n
begin
raiserror(
'%d is not a square number!'
, 16, 1, @n)
return
1
end
select
@width=len(@n)+1, @spaces=space(@width-1)
declare
@sql varchar(
max
), @i int, @lwidth varchar(16), @sql2 varchar(
max
), @sql3 varchar(
max
)
select
@lwidth=
rtrim
(@layer*@width)
, @sql=
'declare @1 varchar('
+@lwidth+
')'
, @sql2=
char
(13)+
char
(10)+
'select @1=SPACE('
+@lwidth+
')'
, @sql3=
char
(13)+
char
(10)+
'print @1'
, @i=2
while
@i<=@layer
select
@sql=@sql+
', @'
+
rtrim
(@i)+
' varchar('
+@lwidth+
')'
, @sql2=@sql2+
', @'
+
rtrim
(@i)+
'=SPACE('
+@lwidth+
')'
, @sql3=@sql3+
char
(13)+
char
(10)+
'print @'
+
rtrim
(@i)
, @i=@i+1
set
@sql=@sql+@sql2
declare
@x int, @y int, @
upper
int, @
loop
int, @ii int, @d int
select
@x=0, @y=1, @
upper
=@layer, @i=1, @
loop
=0, @d=0
while
@i<=@n
begin
set
@ii=1
if
@d=0
-- down
begin
select
@x=@x+1
, @sql=@sql+
char
(13)+
char
(10)+
'select @'
+
rtrim
(@x)
+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width)+
', right('
''
+@spaces+
rtrim
(@i)+
''
', '
+
rtrim
(@width)+
'))'
, @i=@i+1, @ii=@ii+1
while
@ii<=@
upper
select
@x=@x+1
, @sql=@sql+
', @'
+
rtrim
(@x)+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width)+
', right('
''
+@spaces+
rtrim
(@i)+
''
', '
+
rtrim
(@width)+
'))'
, @i=@i+1, @ii=@ii+1
end
else
if
@d=1
-- right
begin
select
@sql2=
''
, @y=@y+@width
while
@ii<=@
upper
select
@sql2=@sql2+right(@spaces+
rtrim
(@i), @width)
, @i=@i+1, @ii=@ii+1
select
@sql=@sql+
char
(13)+
char
(10)+
'select @'
+
rtrim
(@x)
+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width*@
upper
)+
', '
''
+@sql2+
''
')'
, @y=@y+@width*(@
upper
-1)
end
else
if
@d=2
-- up
begin
select
@x=@x-1
, @sql=@sql+
char
(13)+
char
(10)+
'select @'
+
rtrim
(@x)
+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width)+
', right('
''
+@spaces+
rtrim
(@i)+
''
', '
+
rtrim
(@width)+
'))'
, @i=@i+1, @ii=@ii+1
while
@ii<=@
upper
select
@x=@x-1
, @sql=@sql+
', @'
+
rtrim
(@x)+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width)+
', right('
''
+@spaces+
rtrim
(@i)+
''
', '
+
rtrim
(@width)+
'))'
, @i=@i+1, @ii=@ii+1
end
else
if
@d=3
-- left
begin
select
@sql2=
''
while
@ii<=@
upper
select
@sql2=right(@spaces+
rtrim
(@i), @width)+@sql2
, @i=@i+1, @ii=@ii+1
select
@y=@y-@width*@
upper
, @sql=@sql+
char
(13)+
char
(10)+
'select @'
+
rtrim
(@x)
+
'=stuff(@'
+
rtrim
(@x)+
', '
+
rtrim
(@y)+
', '
+
rtrim
(@width*@
upper
)+
', '
''
+@sql2+
''
')'
end
select
@d=(@d+1)%4, @
upper
=@
upper
-@d%2
end
-- print @sql+@sql3
exec(@sql+@sql3)
end
go
exec sp_Test 6400
drop
procedure
sp_Test
转载请注明:
http://www.pmjava.com/?thread-62972-1.html
posted on 2009-06-22 15:46
rrong_m
阅读(1273)
评论(0)
编辑
收藏
Powered by:
BlogJava
Copyright © rrong_m
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
导航
BlogJava
首页
新随笔
聚合
管理
统计
随笔 - 38
文章 - 115
评论 - 0
引用 - 0
常用链接
我的随笔
我的文章
我的评论
我的参与
随笔档案
2009年7月 (1)
2009年6月 (42)
文章分类
j2ee
(rss)
java(4)
(rss)
javascript(8)
(rss)
文章档案
2009年6月 (110)
java编程
java php asp.net编程
java php asp.net编程
搜索
积分与排名
积分 - 72371
排名 - 762
最新评论
阅读排行榜
1. hibernate映射clob blob字段(4528)
2. java去标点符号 正则(3469)
3. java substring截取字符串 汉字和字母(2980)
4. java获取google 的简单天气预报(2002)
5. 递归删除父节点及所有子节点(1655)
评论排行榜
1. 博客搬家(0)
2. sql版 魔方算法(0)
3. mysql 保留字(0)
4. java去标点符号 正则(0)
5. java全角半角转换(0)