在SQL SERVER数据库中查询空号的问题(200分)

  • 主题发起人 主题发起人 chudx
  • 开始时间 开始时间
C

chudx

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表名为:JBZL 其中一个编号字段名为BH 有数据如下 1,16,3,5,4,7,10,11,12,13
现在想在查出在BH字段中所有的没有使用的空号,如上面查出空号为2,6,8,9,14,15。
用一存储过程实现。但是存储过程写出来时,发现SQL中好像没有数组类型,不知怎么才
能把查出的这一组数据返回给Delphi,请各们大侠帮助一下,或有什么其它的办法,最
好是在SQL中完成,不要把数据转给Delphi在处理。
我写的存储过程

Create Procedure p_Query_EmptyNumber as

Declare @I int
Declare @KK int

Select @ I = 0

Declare Cur_store Cursor For
Select BH From JBZL Order By BH For Read Only
Open Cur_Store
Fetch Cur_Store Into @KK

/*取得空号*/
while @@Fetch_Status = 0
begin
Select @I = @I + 1
if @I < @KK
begin
while @I < @KK
begin
Print @I /*怎么把这个地方产生的数据反回到Delphi中呢*/
Select @I = @I + 1
end
end
Fetch Cur_Store Into @KK
end

Close Cur_Store
Deallocate Cur_Store

Go
 
在存储过程中产生一临时表XXX,
将@I插入到临时表,在存储过
程的最后,用SELECT * FROM XXX
结束,这条SELECT语句的结果集将
为DELPHI所用。
 
agree to mech
用临时表,返回给Delphi数据集。
 
select distinct bh from 表则可以返回所有的不重复的编号,返回delphi处理挺方便的。
 
产生一临时表
 
mech IS ALL RIGHT
 
这个问题有点意思。

正确思路应当是用 select 语句来返回一个结果集。

是不是可以构造一个临时表 #BH1,内有 BH 字段,
其值为 1 到 “max(bh) from JBZL”。

然后用
select bh from #BH1
where bh not in
(select bh from JBZL)
=====================================
结果集的操作通常比游标快很多。
 
用Cursor是很慢的,我觉得比DELPHI中还慢。
我认为hhzh426+zwhc的方法好,作一视图select distinct bh from yourTable。
建一表只有一字段,它保存的数与你的视图中最大的值一致,是连续整数。
然后用select bh from #BH1
where bh not in
(select bh from JBZL)
来返回一个结果集。
 
干吗要用临时表
用一个字符串不就行乐么?
返回形如2&amp;6&amp;8&amp;9&amp;14这样的字符串
然后delphi自己去处理不就行乐么
 
小猪的想法不错可以考率
 
有好主意就快说,到星期六我就给分
 
多人接受答案了。
 
后退
顶部