نمایش نتایج 1 تا 3 از 3

نام تاپیک: select FieldName1 as @Varible1,fldname2 as @Valible2 ...

  1. #1

    Question select FieldName1 as @Varible1,fldname2 as @Valible2 ...

    سلام
    من نیاز دارم که در یک حلقه اطلاعات فیلد های یک رکورد رو درون چندتا متغیر در یک پروسیجر بنویسم
    یعنی به این شکا

    SELECT BBEGINDATE AS @BBEGINDATE, BBEGINTIME AS @BBEGINTIME, BENDDATE AS @BENDDATE, BENDTIME AS @BENDTIME, DBEGINTIME AS @DBEGINTIME, DENDDATE AS @DENDDATE ,
    DENDTIME AS @DENDTIME, EBEGINTIME AS @EBEGINTIME, EBEGINDATE AS @EBEGINDATE, EENDDATE AS @EENDDATE, EENDTIME AS @EENDTIME, ENDDATE AS @ENDDATE ,
    ENDTIME AS @ENDTIME , HOLIDAY AS @HOLIDAY
    FROM dbo.ShiftItemDef

    اما خطا می ده آخه بنده خدا نمی دونه که خروجی سلکت حتما یک رکورد هست گیر میده فکر می کنه که چند تا رکورد هست و می نمی شه بزارم تو متغیر
    حالا من می خوام یک دستور بگین که این کار رو برام انجام بده ؟
    اگه می خواین بگین با کرسر این کار رو بکنم لطفا یه مثال بگید
    البته باید خیلی بهینه باشه چون ساختار کارم اشتباه هست اما مجبورم این کار رو بکنم

  2. #2
    کاربر تازه وارد آواتار darvishiali
    تاریخ عضویت
    آبان 1385
    محل زندگی
    شیراز
    پست
    61
    سلام؛

    اگه می خوای همیشه فقط اولین رکورد رو از DataSet بخونی، باید از
    SELECT TOP 1 ...
    استفاده کنی.

    ولی اگه با Cursor میخوای بنویسی، یه مثال برای کارت میتونه این باشه :

    --تعریف متغیرها
    DECLARE @BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY DataType
    --تعریف کرسر
    DECLARE Cursor1 CURSOR FOR
    SELECT BBEGINDATE, BBEGINTIME, BENDDATE, BENDTIME, DBEGINTIME,
    DENDDATE, DENDTIME, EBEGINTIME, EBEGINDATE, EENDDATE, EENDTIME, ENDDATE, ENDTIME, HOLIDAY
    FROM dbo.ShiftItemDef
    OPEN Cursor1
    FETCH NEXT FROM Cursor1 INTO @BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY
    --تا زمانی که رکوردی وجود دارد
    WHILE @@FETCH_STATUS = 0
    BEGIN
    --هرکار با دیتا
    --...
    FETCH NEXT FROM Cursor1 INTO @BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY
    END
    CLOSE Cursor1
    DEALLOCATE Cursor1

  3. #3
    خوب حالا اگه بخوام این کرسر چندتا رکورد رو بر گردونه به طوری که من از اول بخونم بعد از این که به آخر رسیدم دوباره اگه خواستم برگردم از اول بخونم چکار باید کنم
    البته کل این دستورات داخل یک حلقه دیگه هست به طوری که با هر بار اجرای این کرسر برای هر رکورد اون هم به صورت دستی یک مورد جلو می رود
    من این کار رو به این شکل انجام دادم در سلکت مربوط به کرسر اون چندتا رکرود رو برگردوندم و هر جا که این جمله بود (FETCH NEXT)او خط رو با این جمع عوض کردم (FETCH FIRST) البته در یک دستور شرطی که اگه به آخر کرسر برسه بره اول اون تا زمانی که اون شرط کی در وایل هم استفاده کردم برقرار اما نمی شه یک مشکلی داره
    من نمی دونم چرا توی 2 جا از FETCH NEXT استفاده کردین؟!
    اینم کد کامل من

    CREATE PROCEDURE [SpCopyFromUntilDefShift]
    ( @IdShift numeric,
    @SDateOlgo [char](5),
    @EDateOlgo [char](5),
    @SDateRep [char](5),
    @EDateRep [char](5),
    @YearDate [char](5),
    @hasExit [int]output
    )
    AS
    declare @NoDayOlgo int, @NoDayPeriod int, @I int
    declare @strTemp Char(20), @strTemp2 char(20)

    set @strTemp=dbo.Persian2Civil(@YearDate ,substring( @SDateRep,1,2),substring( @SDateRep,4,2))
    set @strTemp2=dbo.Persian2Civil(@YearDate ,substring( @EDateRep,1,2),substring( @EDateRep,4,2))
    set @i = DATEDIFF(day,@strTemp,@strTemp2 )

    set @strTemp=dbo.Persian2Civil(@YearDate ,substring( @SDateOlgo,1,2),substring( @SDateOlgo,4,2))
    set @strTemp2=dbo.Persian2Civil(@YearDate ,substring( @EDateOlgo,1,2),substring( @EDateOlgo,4,2))

    set @NoDayOlgo = DATEDIFF(day,@strTemp,@strTemp2) + 1
    set @NoDayPeriod = Cast((@i / @NoDayOlgo)as int)

    declare @DBEGINDATECur char(5),@DBEGINDATEOlgo char(5)
    declare @DBEGINDATE char(5), @BBEGINDATE char(5), @BBEGINTIME char(5), @BENDDATE char(5), @BENDTIME char(5), @DBEGINTIME char(5), @DENDDATE char(5)
    declare @DENDTIME char(5), @EBEGINTIME char(5), @EBEGINDATE char(5), @EENDDATE char(5), @EENDTIME char(5), @ENDDATE char(5), @ENDTIME char(5)
    declare @HOLIDAY int
    --تعریف کرسر

    set @DBEGINDATECur =@SDateRep
    --set @DBEGINDATEOlgo =@SDateOlgo

    WHILE @DBEGINDATECur < = @EDateRep
    BEGIN
    --WHILE @i =@NoDayOlgo-1
    --BEGIN
    DECLARE Cursor1 CURSOR FOR
    SELECT DBEGINDATE,BBEGINDATE, BBEGINTIME, BENDDATE, BENDTIME, DBEGINTIME,
    DENDDATE, DENDTIME, EBEGINTIME, EBEGINDATE, EENDDATE, EENDTIME, ENDDATE, ENDTIME, HOLIDAY
    FROM dbo.ShiftItemDef
    WHERE (TypeShiftId = @IdShift) AND (DBEGINDATE =@DBEGINDATEOlgo )
    OPEN Cursor1
    if @EDateOlgo=@DBEGINDATEOlgo and @DBEGINDATECur=@EDateRep
    FETCH first FROM Cursor1 INTO @DBEGINDATEOlgo,@BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY
    else
    FETCH next FROM Cursor1 INTO @DBEGINDATEOlgo,@BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY

    --تا زمانی که رکوردی وجود دارد
    WHILE @@FETCH_STATUS = 0
    BEGIN
    set @BBEGINDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@BBEGINDATE,@DB EGINDATECur,@YearDate)
    set @BENDDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@BENDDATE,@DBEG INDATECur,@YearDate)
    set @DENDDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@DENDDATE,@DBEG INDATECur,@YearDate)
    set @EBEGINDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@EBEGINDATE,@DB EGINDATECur,@YearDate)
    set @EENDDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@EENDDATE,@DBEG INDATECur,@YearDate)
    set @ENDDATE =dbo.ReturnNewDate(@DBEGINDATEOlgo,@ENDDATE,@DBEGI NDATECur,@YearDate)

    UPDATE ShiftItemDef
    SET BBEGINDATE =@BBEGINDATE, BBEGINTIME =@BBEGINTIME, BENDDATE =@BENDDATE, BENDTIME =@BENDTIME, DBEGINTIME =@DBEGINTIME, DENDDATE =@DENDDATE,
    DENDTIME =@DENDTIME, EBEGINTIME =@EBEGINTIME, EBEGINDATE =@EBEGINDATE,
    EENDDATE =@EENDDATE, EENDTIME =@EENDTIME, ENDDATE =@ENDDATE, ENDTIME =@ENDTIME, HOLIDAY =@HOLIDAY
    WHERE (TypeShiftId = @IdShift) AND (DBEGINDATE =@DBEGINDATECur )
    /**/
    --set @i=@i+1
    set @strTemp=dbo.Persian2Civil(@YearDate ,substring( @DBEGINDATECur,1,2),substring( @DBEGINDATECur,4,2))
    set @strTemp = DATEADD(day,1,@strTemp2)
    set @DBEGINDATECur =dbo.Civil2Persian(DATEPART(month,@strTemp)& substring(@StrTemp,4,8))
    if @EDateOlgo=@DBEGINDATEOlgo and @DBEGINDATECur=@EDateRep
    FETCH first FROM Cursor1 INTO @DBEGINDATEOlgo,@BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY
    else
    FETCH next FROM Cursor1 INTO @DBEGINDATEOlgo,@BBEGINDATE, @BBEGINTIME, @BENDDATE, @BENDTIME, @DBEGINTIME, @DENDDATE,
    @DENDTIME, @EBEGINTIME, @EBEGINDATE, @EENDDATE, @EENDTIME, @ENDDATE, @ENDTIME, @HOLIDAY

    END
    CLOSE Cursor1
    DEALLOCATE Cursor1
    --END

    END
    GO


    کجای کدم مشکل داره (می دونم خیلی بد شده)؟
    در ضمن اگه می شه ادامه بحث رو در تاپیک زیر دنبال کنیم جواب مربوط به این تاپیک رو گرفتم. با تشکر
    https://barnamenevis.org/showthread.php?t=59036

تاپیک های مشابه

  1. select sql
    نوشته شده توسط IC_prog در بخش Foxpro
    پاسخ: 12
    آخرین پست: چهارشنبه 16 مرداد 1392, 22:11 عصر
  2. طریقه تعریف تابع در SQL و استفاده در دستور Select
    نوشته شده توسط Mahdi_S_T در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: جمعه 23 شهریور 1386, 19:05 عصر
  3. فیلتر کردن دیتاهای یک select
    نوشته شده توسط shahroozj در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: سه شنبه 18 بهمن 1384, 14:15 عصر
  4. یک سوال در مورد SELECT
    نوشته شده توسط jk در بخش SQL Server
    پاسخ: 2
    آخرین پست: دوشنبه 02 آبان 1384, 09:00 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •