找回密码
 立即注册

QQ登录

只需一步,快速开始

平底锅

高级会员

17

主题

21

帖子

1327

积分

高级会员

积分
1327

活字格认证

平底锅
高级会员   /  发表于:2010-10-10 16:52  /   查看:8012  /  回复:3
在实际的编程中,有时需要一个固定数据的Master数据,这时,又不想建立一个实体的表。
合理利用Values的语法,下边的方法可以实现,也可参与Join的操作。

SELECT x.name,x.value
FROM (Values('name1',124),('ok',32),('left',0),('right',1)) AS x (name, value);

3 个回复

倒序浏览
Arthas
葡萄城公司职员   /  发表于:2010-10-30 19:44:00
推荐
好像是sql server 2008新加的语法。
可以用来构造顺序数字的表。

比如with0到9,
然后用四次cross join, 分别乘上1, 10,100,1000
然后就可以得到0到9999的所有数字。。。
扯淡第一高手
回复 使用道具 举报
平底锅
高级会员   /  发表于:2010-10-30 17:34:00
沙发
;with digits(i) as
(select i
from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as digits(i)
)
,sqeuence(d1,d2,d3) as (
  select d1.i as d1i,d2.i as d2i,d1.i+(10*d2.i) as d3
  from digits as d1 cross join digits as d2
             )
,Sumd(d) as (
                     select d1.i+(10*d2.i) as Sumd
                    from digits as d1 cross join digits as d2
                   )

--select *
--from digits;

select *
from Sumd;
回复 使用道具 举报
Arthas
葡萄城公司职员   /  发表于:2010-10-30 19:45:00
地板
没有values的这种新用法的时候, 是很啰嗦的:
select 0
union all
select 1
union all
select 2
union all
select 3
.
.
.
.
union all
select 9
扯淡第一高手
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部