关于一面试题。

习惯性蹭分 2013-09-12 06:01:40
好久没发贴了,发个贴攒点人气。

定义了两个变量,不通过第三个变量,把两个变量的值互换,不能用临时表及表变量。最好用SQL解决。
目前想到的是转换为字符型可以实现,还有什么其它方法没?
...全文
447 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
小飞侠Eirc 2013-09-18
  • 打赏
  • 举报
回复
用派生表不知道符不符合要求? 如下:
declare @a varchar(4000),@b varchar(4000)
select @a='aaaaaaa',@b='bbbbbbb'
select @a=b,@b=a FROM (select @a AS a,@b AS b) as ab
select @a as a ,@b as b

/**
a	b
bbbbbbb	aaaaaaa
**/
await2013 2013-09-15
  • 打赏
  • 举报
回复
路过学习
军说网事 2013-09-15
  • 打赏
  • 举报
回复
这个题目有点意思。
reverzeng 2013-09-14
  • 打赏
  • 举报
回复
引用 2 楼 hdhai9451 的回复:
declare @a int,@b int
select @a=2,@b=5

set @a=@a+@b
set @b=@a-@b
set @a=@a-@b

select @a as 'a',@b as 'b'


/*
a	b
5	2
*/
这个题目人家经常用来面试
我也碰过
simoga 2013-09-14
  • 打赏
  • 举报
回复
SELECT a=b,b=a from a_table;
越过越咸 2013-09-14
  • 打赏
  • 举报
回复
he he 还有点小技巧
XMPP 2013-09-13
  • 打赏
  • 举报
回复
2楼厉害!
缄默默默 2013-09-13
  • 打赏
  • 举报
回复
习惯性蹭分 2013-09-13
  • 打赏
  • 举报
回复
引用 7 楼 pangyannan 的回复:
这个命题是有限制条件的,如果数据类型接近溢出范围,那么不采取另外一个变量,a+b的话数据就会溢出 另外,如果a,b是varchar类型的, SQL 如下

DECLARE @a varchar(50),@b varchar(50)
SELECT @a='AA',@b='BBB'

SET @a=@a+@b
SET @b=LEFT(@a,LEN(@a)-LEN(@b))
SET @a=RIGHT(@a,LEN(@a)-LEN(@b))

SELECT @a AS a,@b AS b
/**
a	b
BBB	AA
**/
恩,跟我想的差不多,用varchar(max)应该就不会那么容易溢出了吧。
小飞侠Eirc 2013-09-13
  • 打赏
  • 举报
回复
这个命题是有限制条件的,如果数据类型接近溢出范围,那么不采取另外一个变量,a+b的话数据就会溢出 另外,如果a,b是varchar类型的, SQL 如下

DECLARE @a varchar(50),@b varchar(50)
SELECT @a='AA',@b='BBB'

SET @a=@a+@b
SET @b=LEFT(@a,LEN(@a)-LEN(@b))
SET @a=RIGHT(@a,LEN(@a)-LEN(@b))

SELECT @a AS a,@b AS b
/**
a	b
BBB	AA
**/
zhaojm0405 2013-09-12
  • 打赏
  • 举报
回复
Neo_whl 2013-09-12
  • 打赏
  • 举报
回复
呵呵,这道题要是有其他语言基础,思路转换到sql上来就比较容易了,2楼大牛正解
Andy__Huang 2013-09-12
  • 打赏
  • 举报
回复
declare @a int,@b int
select @a=2,@b=5

set @a=@a+@b
set @b=@a-@b
set @a=@a-@b

select @a as 'a',@b as 'b'


/*
a	b
5	2
*/
这个题目人家经常用来面试
發糞塗牆 2013-09-12
  • 打赏
  • 举报
回复
用编程语言好像有swap函数吧

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧