PDA

View Full Version : مشکل در یک Select



mehdi5106
یک شنبه 24 مرداد 1389, 19:10 عصر
دو جدول در نظر بگیرید با فیلدهای زیر:

جدول اول : startnum,endnum
جدول دوم : num

نوع فیلدها هم از نوع nvarchar می باشد.
حالا خروجی select می خواهم همه شماره های بین startnum و endnum بدون شماره های موجود در جدول دوم باشد.

با کرسر و declare هر کاری کردم چیزی به ذهنم نرسید.
دیگه هنگ کردم.
اگه دوستان کمک کنند ممنون میشم.

با تشکر

sohrab o
یک شنبه 24 مرداد 1389, 19:47 عصر
من هم همین مشکلو دارم
میخوام تمام اعداد صحیح بین N و M

FastCode
یک شنبه 24 مرداد 1389, 20:37 عصر
من هم همین مشکلو دارم
میخوام تمام اعداد صحیح بین N و M


declare @i int
set @i= @M - 1
while(@i!=@N)
BEGIN
select @I = @I + 1
select @I
END

mehdi5106
دوشنبه 25 مرداد 1389, 07:10 صبح
آقای FaseCode این کد شما فقط عدد اول رو تو خروجی می ده ...

mehdi5106
دوشنبه 25 مرداد 1389, 07:13 صبح
اینجوری درست شد:

declare @test table(id int)
declare @i int
set @i= 25000
while(@i!=25025)
BEGIN
select @i = @i + 1
insert into @test select @i
END

select * from @test

manij_mhm
دوشنبه 25 مرداد 1389, 13:48 عصر
اینم کد کامل:


declare @i int, @ii int, @e int, @s int
declare @newtable table(id int)
select @s=s, @e=e from t1
set @ii=@s
DECLARE c1 CURSORFORWARD_ONLYREAD_ONLYfor
select*from t2 orderby n asc
OPEN c1
FETCHNEXTFROM c1 INTO @i
WHILE (@@FETCH_STATUS=0 )
BEGIN
if(@ii>@e)break
if(@ii!= @i )begin
insertinto @newtable select @ii
set @ii=@ii+1
end
else
begin
set @ii=@ii+1
FETCHNEXTFROM c1 INTO @i
end
END
CLOSE c1
DEALLOCATE c1
while(@ii<=@e)begin
insertinto @newtable select @ii
set @ii=@ii+1
end
select*from @newtable

محمد سلیم آبادی
سه شنبه 26 مرداد 1389, 01:43 صبح
اینجوری درست شد:

declare @test table(id int)
declare @i int
set @i= 25000
while(@i!=25025)
BEGIN
select @i = @i + 1
insert into @test select @i
END

select * from @test

این کار از لحاظ عملکردی صحیح نیست. چون که مثلا برای بدست آوردن 25 عدد 25 عمل insert صورت میگره.
روش صحیح این است که از یک جدول کمکی اعداد (http://www.30sharp.com/article/13/216/11/%d8%ac%d8%af%d9%88%d9%84-%da%a9%d9%85%da%a9%db%8c-%d8%a7%d8%b9%d8%af%d8%a7%d8%af.aspx)استفاده کنید. و با کوئری شبیه به زیر این کار را انجام بدین.

SELECT n FROM number_table WHERE n BETWEEN 25000 AND 25025;