探索 sql语句 , 游标产生的重复

plglenn8 2009-09-10 08:32:13
我想从北风数据库中获得如下结果:(注意,是一行)
姓名:Davolio,职位:Sales Representative 姓名:Fuller,职位:Vice President, Sales 姓名:Leverling,职位:Sales Representative 姓名:Peacock,职位:Sales Representative 姓名:Buchanan,职位:Sales Manager 姓名:Suyama,职位:Sales Representative 姓名:King,职位:Sales Representative

我写的一个游标如下,您们看看,感觉重复了啊,很重复啊,重复就意味失败的发生几率加大,



DECLARE name_cursor CURSOR
FOR SELECT [LastName] FROM [Employees] ---a
DECLARE title_cursor CURSOR
FOR SELECT [Title ] FROM [Employees] --a same

DECLARE @sum VARCHAR( 1000),@s VARCHAR( 1000),@s1 VARCHAR( 1000)
SET @s =''
SET @s1 =''
SET @sum =''

OPEN name_cursor ---b
OPEN title_cursor ---b same
FETCH name_cursor INTO @s
FETCH title_cursor INTO @s1
WHILE (@@FETCH_STATUS =0)
BEGIN
SET @sum=@sum+'姓名:' +@s+','+'职位:'+@s1+' '
FETCH name_cursor INTO @s --- c
FETCH title_cursor INTO @s1 --- c same
END
CLOSE name_cursor
CLOSE title_cursor
deallocate name_cursor
deallocate title_cursor
SELECT @sum

...全文
111 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6415151528 2009-09-10
  • 打赏
  • 举报
回复
用游标效率极其低..


plglenn8 2009-09-10
  • 打赏
  • 举报
回复
ok
结贴了
playwarcraft 2009-09-10
  • 打赏
  • 举报
回复
就算是cursor也不是這樣用


declare @name varchar(100), @title varchar(200)
declare @sum varchar(8000)
set @sum=''

declare c1 cursor for
select LastName,Title from Employees

open c1
fetch next from c1 into @name,@title
while @@fetch_status=0
begin
select @sum=@sum+' 姓名:'+@name+',职位:'+@title
fetch next from c1 into @name,@title
end

close c1
deallocate c1
pt1314917 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 plglenn8 的回复:]
引用 9 楼 plglenn8 的回复:
请用
游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现


简化我写的游标    简化我写的游标  简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标简化我写的游标    简化我写的游标
[/Quote]

貌似很极端、很抓狂。。
soft_wsx 2009-09-10
  • 打赏
  • 举报
回复
use ksoa
declare @sql varchar(8000)
select @sql=isnull(@sql+' ','')+'姓名:'+[spmch]+',职位:'+shpchd from spkfk
print @sql

--姓名:野生山葛粉,职位:江西三清制药有限公司 姓名:鼎龙红花油
这样的结果
plglenn8 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pt1314917 的回复:]
引用 5 楼 plglenn8 的回复:
引用 3 楼 pt1314917 的回复:
SQL code--这样就可以了。。declare@sqlvarchar(8000)select@sql=isnull(@sql+'','')+'姓名:'+[LastName]+',职位:'+titlefrom Employeesprint@sql


老师好啊,教师节快乐,您的方法我明白了,但我先问问游标有没有将其简化的方法


用游标效率极其低,为什么要舍易求难呢?
如果是用游标,也不需要两个,比如:

SQL codeDECLARE@sumVARCHAR(1000),@sVARCHAR(1000),@s1VARCHAR(1000)DECLARE mycursorCURSORFORSELECT[LastName],TitleFROM[Employees]OPEN mycursorFETCH mycursorINTO@s,@s1WHILE (@@FETCH_STATUS=0)BEGINSET@sum=isnull(@sum+'','')+'姓名:'+@s+','+'职位:'+@s1+''FETCH mycursorINTO@s,@s1ENDCLOSE mycursordeallocate mycursorSELECT@sum
[/Quote]

原来一一对应啊,神奇
csdyyr 2009-09-10
  • 打赏
  • 举报
回复
一个游标就够了。
plglenn8 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 plglenn8 的回复:]
请用
游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现
[/Quote]

简化我写的游标 简化我写的游标 简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标简化我写的游标 简化我写的游标
pt1314917 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 plglenn8 的回复:]
引用 3 楼 pt1314917 的回复:
SQL code--这样就可以了。。declare@sqlvarchar(8000)select@sql=isnull(@sql+'','')+'姓名:'+[LastName]+',职位:'+titlefrom Employeesprint@sql


老师好啊,教师节快乐,您的方法我明白了,但我先问问游标有没有将其简化的方法
[/Quote]

用游标效率极其低,为什么要舍易求难呢?
如果是用游标,也不需要两个,比如:

DECLARE @sum VARCHAR( 1000),@s VARCHAR( 1000),@s1 VARCHAR( 1000)
DECLARE mycursor CURSOR FOR SELECT [LastName],Title FROM [Employees]
OPEN mycursor
FETCH mycursor INTO @s,@s1
WHILE (@@FETCH_STATUS =0)
BEGIN
SET @sum=isnull(@sum+' ','')+'姓名:' +@s+','+'职位:'+@s1+' '
FETCH mycursor INTO @s,@s1
END
CLOSE mycursor
deallocate mycursor
SELECT @sum
plglenn8 2009-09-10
  • 打赏
  • 举报
回复
请用
游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现游标实现
soft_wsx 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 plglenn8 的回复:]
引用 3 楼 pt1314917 的回复:
SQL code--这样就可以了。。declare@sqlvarchar(8000)select@sql=isnull(@sql+'','')+'姓名:'+[LastName]+',职位:'+titlefrom Employeesprint@sql


老师好啊,教师节快乐,您的方法我明白了,但我先问问游标有没有将其简化的方法
[/Quote]楼主想实现什么样的功能呀!为什么用游标,还是两层的
playwarcraft 2009-09-10
  • 打赏
  • 举报
回复

--這樣就OK
declare @s varchar(8000)
set @s=''

select @s=@s+' 姓名:'+Rtrim([LastName])+',职位:'+Rtrim([Title])
From [Employees]

select @s
csdyyr 2009-09-10
  • 打赏
  • 举报
回复
use northwind

declare @str nvarchar(4000)
set @str=N''

select @str=@str+' '+N'姓名:'+lastname+' '+N'职位:'+title
from Employees

select @str
plglenn8 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pt1314917 的回复:]
SQL code--这样就可以了。。declare@sqlvarchar(8000)select@sql=isnull(@sql+'','')+'姓名:'+[LastName]+',职位:'+titlefrom Employeesprint@sql
[/Quote]

老师好啊,教师节快乐,您的方法我明白了,但我先问问游标有没有将其简化的方法
pt1314917 2009-09-10
  • 打赏
  • 举报
回复
就算真用游标,也不是你这么个用法啊。。
pt1314917 2009-09-10
  • 打赏
  • 举报
回复

--这样就可以了。。
declare @sql varchar(8000)
select @sql=isnull(@sql+' ','')+'姓名:'+[LastName]+',职位:'+title from Employees
print @sql
plglenn8 2009-09-10
  • 打赏
  • 举报
回复
yeah
lihan6415151528 2009-09-10
  • 打赏
  • 举报
回复
north库?

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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