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

نام تاپیک: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

  1. #1

    نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    سلام به دوستان عزيز
    قصد نوشتن يه روال ذخيره شده رو دارم در حالي كه آشنايي لازم رو هم ندارم.
    از دوستان محترم و برنامه نويس خواهش مي كنم كه من رو براي نوشتن اين stored procedure راهنمايي كنن ، ممنون:

    هدف روال generate كردن يك كد در كنار تمامي رديف هاي يك table هست، لازم به ذكره كه تعداد ركوردها تا يك ميليون ركورد هم مي تونه باشه و بهينگي كد مهمه كه در زمان حداقل انجام بشه.
    اين كدي كه قراره generate بشه به داده ي اوليه اي نياز داره كه بايد در يك آرايه ديناميك قرار گرفته باشه و فرض كنيد بسته به باقيمانده تقسيم id ركورد بر يك عدد ثابتي انديس آرايه ي داده ها رو بدست مياريم و اون رو بعنوان كد مورد نظر تو ركوردمون ثبت مي كنيم و مقدار اون انديس رو xتا افزايش مي ديم.


    مثال :
    ارايه
    انديس 0 1 2 3 4
    مقادير اوليه 2 15 20 25 37

    فيلدهاي جدول
    id , code
    id از يك تا يك ميليون هست
    مقدار id ؛ mod ميشه با 5 كه انيس آرايه به دست بياد ، مقدار اون خونه ي آرايه در فيلد code اين رديف ميشينه ، مقدار اون خونه ارايه كه بدست اومد با شماره ي انديسش+1 جمع ميشه.

    اگه توضيحم واضح نبود بگيد تا يشتربراتون توضيح بدم
    ممنون

  2. #2

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    دقیقا متوجه خواسته شما نشدم. مطابق مثال زیر چندتا داده نمونه و همچنین خروجی مورد نظرتون رو بذارید تا بهتر بشه کمک کرد.
    Declare @Tbl Table (ID int Identity(1, 1), DataValue)

    Insert Into @Tbl Values(2)
    Insert Into @Tbl Values(13)
    Insert Into @Tbl Values(15)
    Insert Into @Tbl Values(19)
    Insert Into @Tbl Values(25)
    Insert Into @Tbl Values(36)
    Insert Into @Tbl Values(39)
    Insert Into @Tbl Values(63)
    Insert Into @Tbl Values(71)
    Insert Into @Tbl Values(72)


    Declare @STR nvarchar(max)
    Set @STR = 'int[,] arr = new int[' + (Select Count(1)/5+1 From @Tbl) + ',5];'

    Set @STR = @STR + (Select '
    arr[' + Cast(ID/5 as Nvarchar) + ',' + Cast((ID-1)%5 as nvarchar) + '];'
    From @Tbl For XML Path('')

    Set @STR = Replace(@Str, '
', '')

    Print @STR
    به سوالات خصوصی پاسخ داده نمی شود.

  3. #3

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    كدي كه مي خواستم به stored procedure تبديل كنم دقيقا كد زيره:
    حلقه اي كه براي پيمايش جدول و تغيير مقدار فيلدها به كار بردم براي جداول بزرگ خيلي طول مي كشه و فكر مي كنم بااستفاده از روال ذخيره شده سرعت افزايش پيدا كنه.
    اگه ممكنه كمكم كنيد
    var
    Form1: TForm1;
    Counter : Array of Integer;

    implementation

    {$R *.dfm}
    function TForm1.GetRadMaj(DivCount,dav:integer):integer;
    Const
    ColumnCount = 250;
    var
    i,imod:integer;
    MaxCount ,Index :integer;
    begin
    MaxCount:= ColumnCount * DivCount;

    imod := dav mod MaxCount;
    if imod = 0 then imod := MaxCount;

    index := ((imod-1) DIV ColumnCount)+1;
    Result := Counter[Index];
    Counter[Index]:=Counter[Index]+DivCount;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var divcount , i:integer;
    begin
    divcount:=8;
    SetLength(Counter,DivCount+1);
    for I := 1 to DivCount do
    Counter[I]:=I;


    ADOQuery1.Close;
    ADOQuery1.SQL.Text:='Select * from g order by [Column 0]';
    ADOQuery1.Open;

    ADOQuery1.DisableControls;
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
    ADOQuery1.Edit;
    ADOQuery1.FieldByName('radif').Value:=IntToStr(Get RadMaj(divcount,ADOQuery1.FieldByName('Column 0').AsInteger));
    ADOQuery1.CheckBrowseMode;
    ADOQuery1.Next;
    end;
    ADOQuery1.EnableControls;
    end;

  4. #4

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    سلام سعید جان،
    عرضم به حضورت که پست اولت رو خوندم و دقیق متوجه مسالت شدم، در SQL آرایه و ماتریس وجود نداره که ما بخواهیم باهاش کار کنیم. شما مجبورین که آرایه ای که معرفی کردین رو در قالب یک جدول بیارین (همانطور که در تصویر زیر دیده میشه).
    اگر ماتریس(آرایه) خودتون رو به جدول تبدیل کنید. اون وقت با کوئری که در انتها نوشتم مشکلتون حل میشه.
    Untitled.png
    SELECT N.id,
    Code = M.value + N.[index] + 1
    FROM Numbers AS N
    INNER JOIN [Mod] AS M
    ON N.id % 5 = M.[index];
    -- % = Mod Function

  5. #5

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    یا اگر این 5 مقدار که در آرایه هستند همیشه ثابت بوده و طول آرایه هم تغییر نمیکنه آنگاه خیلی ساده تر میشه مساله رو به این شکل حل کرد:
    SELECT Id,
    Code = CASE id % 5
    WHEN 0 THEN 2
    WHEN 1 THEN 15
    WHEN 2 THEN 20
    WHEN 3 THEN 25
    ELSE 37
    END
    FROM Numbrs

  6. #6

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    محمدجان ممنونم از راهنماييهات
    اما خب نتونستم مشكلم رو حل كنم
    يه طور ديگه مطرح مي كنم مساله رو :
    فرض كن يك جدول با 2 فيلد داريم ؛ فيد اول ID كه از 1 شروع ميشه تا يك ميليون؛ يعني يك ميليون ركورد داريم.فيلد دوم Value و خاليه و با استفاده از يك كوئري يا stored procedure مي خواهيم مقدار دهيش كنيم.
    8 تا شمارنده داريم كه اولي مقدارش يكه ؛ دومي 2 ؛ سومي 3 و ...
    ابتدا جدول بايد بر اساس ID سورت باشه.
    لازمه كه 250 تا 250 جدول رو جدا كنيم و هر 250 رديف از يك شمارنده استفاده مي كنه، بطوريكه 250 تاي اول از شمارنده ي اول استفاده مي كنه يعني رديف 1 تا 250 مقدار فيلد دومش ميشه
    Counter1 = counter1 + 8
    250 تاي دوم از شمارنده دوم استفاده مي كنه و مقدار فيلد دومش ميشه :
    Counter2 = Counter2 + 8
    و 250 تاي سوم از شمارنده سوم استفاده مي كنه و همينطور الي شمارنده هشتم
    شمارنده هشتم تا رديف 2000 رو مي تونه مقدار دهي كنه ، رديف 2001 الي 2250 دوباره از شمارنده اول استفاده مي كنه و شمارش رو ادامه مي ده ؛ رديف 2251 الي 2500 ا شمارنده دوم استفاده مي كنه و الي آخر
    و مساله اينطوري بايد انجام بشه
    گفتم كه كدش رو نوشتم البته با دلفي و خيلي كنده نياز به كدي دارم تو Sql كه سرعت رو خيلي بالا ببره و بهينه هم باشه.
    ممنون ميشم اگه كدي كه مي نويسي رو كامل بنويسي چون با زبون sql زياد آشنا نيستم.
    ممنونم ازت ومنتظر جوابت هستم
    مرسي؛ سعيد

  7. #7

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    سوال 1: این شمارنده هایی که در مثالتون آوردین همیشه مقادیرشون از 1 تا 8 هستند یا خیر؟ مثلا میتونه شمارنده 1 دارای مقدار 5 باشه بر فرض و مقدار شمارنده 2 باشه 7؟

    سوال 2: مقدار فیلد دوم جدولی که دارای ستون ID هست از فرمول زیر محاسبه میشه دیگه درسته؟
    مثلا ID (یا همون column0) اگه در رنج 1 تا 250 باشه مقدار ردیف های متناظر برابر خواهد بود با:
    radif = (column0 - 1) * 8 + (مقدار شمارنده 1)


    سوال 3: می تونه تعداد شمارنده ها متغیر باشه مثلا به جای 8 با شه 10؟

    سوال 4:این مسأله جدیدی که مطرح کردین ساده شدۀ مساله واقعی است یا اینکه خود مسأله واقعی است؟ ضمن اینکه من از کد Delphi چیزی نمیتونم برداشت داشته باشم.

  8. #8

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    پاسخ سوال 1: هميشه مقدار اوليه شمارنده ها از يك شروع ميشه و انديس شمارندس؛ يعني شمارنده يك 1 شمارنده ي دو 2 شمارنده ي سه 3 و ...
    پاسخ سوال 2: بله درسته ؛ فرمولي كه نوشتي درسته.
    پاسخ سوال 3 : مي تونه باشه، ولي مهم نيست، اما خب ديناميك بودنش بهتره يعني طوري طراحي بشه كه با هر تعداد شمارنده كار بكنه ، همين جاي مساله بود كه آرايه هاي ديناميك رو مطرح كردم.
    پاسخ سوال 4: خود مساله اي هست كه دنبال جوابشم. كد دلفي رو توجهي بهش نكن ؛ همه اونچيزي كه لازم بود رو تو پست#6 توضيح دادم.
    مرسي

  9. #9

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    گرفتم مساله چیه. اما از اونجایی که تعداد ردیف ها(یک میلیون) فراتر از حاصل ضرب 8 در 250 هست (که ردیف های بالاتر از 2000 باید دوباره ریست بشن...)، بر اساس اون تکنیکی که قبلا بلد بودم به جوابی نرسیدم. از طرفی این عدد 8 هم میتونه متغیر باشه که مساله رو پیچیده تر میکنه.
    میتونی الگوریتمی که خودتون برای حل این مساله استفاده کردین رو به زبان ساده بیان کنین؟ تا ازش الگوبرداری کنم؟

  10. #10

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    كدي كه با دلفي نوشتم اينطوره
    يك آرايه پويا در نظر گرفتم كه طولش به تعداد شمارنده هاست
    اول كار هم از يك تا n مقدار دهي مي شه
    بعد جدول رو sort مي كنم بر اساس id
    رديه به رديف پيمايش رو شروع مي كنم از ابتدا تا انتهاي جدول
    سه رقم سمت راست id رو در نظر مي گرم ؛ با استفاده از باقيمانده تقسيم اون بر تعداد شمارنده ها مي فهمم كه از كدوم شمارنده بايد استفاده كنم
    مقدار شمارنده رو براي رديف مورد نظر ذخيره مي كنم و شمارنده رو به تعداد شمارنده ها (كه در اين مثال 8 هست) افزايش مي دم.
    ولي خب اين روش كنده متاسفانه

  11. #11

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    البته مقدار شمارنده ها براي رديف 2000 به بعد ريست نمي شه ها! ادامه پيدا ميكنه فقط انديس شمارنده ها ريست مي شه!

  12. #12

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    برای اینکه بد قولی نکرده باشم. رو مساله زیاد کار کردم. گرچه تا امروز مساله مشابه این رو حل نکرده بودم.
    لطفا اسکریپت زیر رو در یک پنجره کوئری تو اسکیول سرور اجرا کنید و خروجیش رو بررسی کنید. اگه خروجی دقیقا اون چیزی بود که میخواستین بهم بگین تا تر تمیزش کنم و تحویلتون بدم:
    -- 1 to 1000000
    declare @t table(i int)
    insert into @t
    select top(1000000) row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c

    -- Query
    select i,case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
    from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @t
    )d

  13. #13

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    واي چه جالب!
    چقدر خوبه كه ميشه همچين كدي زد و اينقدر سريع كدها رو توليد بكنه!
    محمد جان تقريبا درسته
    يعني درسته فقط بعد از ركورد 2000 ام مقدار شمارنده ها ريست ميشه كه نبايد اينطور باشه و بايد ادامه پيدا كنه!

  14. #14

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    فقط بعد از ركورد 2000 ام مقدار شمارنده ها ريست ميشه كه نبايد اينطور باشه و بايد ادامه پيدا كنه!
    متوجه نمیشم. مگه مقدار شمارنده با مقدار اندیسش یکی نیست؟ یعنی با ریست شودن اندیس نباید مقدارش هم ریست بشه؟
    میشه یک نمونه داده بعد از رکورد 2000 بهم نشون بدین تا دقیق بفهمم مساله از چه قراره؟

  15. #15

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    میشه یک نمونه داده بعد از رکورد 2000 بهم نشون بدین تا دقیق بفهمم مساله از چه قراره؟
    اينم يه نمونه
    Database1.rar

  16. #16

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    نقل قول نوشته شده توسط saeed6162 مشاهده تاپیک
    اينم يه نمونه
    Database1.rar
    این چه فایلیه؟ Access هست؟ اگه آره من نصب ندارم.
    میتونی خروجیت رو توی مثلا ورد، notepad++یا اکسل اکسپورت کنی؟

  17. #17

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    اينم فايل متنيش
    1.rar

  18. #18

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    کاشکی حداقل 8 هزار سطر اول رو ارسال می کردید تا بیشتر بررسی میکردم. اگه اسکریپت زیر هم جواب نداد 8 هزار سطراول رو ارسال کن.
    این اسکریپت 10 هزار سطراولیه رو تولید میکنه ببینید نتجیش چطور متور؟
    -- 1 to 1000000
    declare @t table(i int)
    insert into @t
    select top(10000) row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c

    -- Query
    select i,
    case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
    from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @t
    )d

  19. #19

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    شما نیازتون چیه؟ داشتن یک جدولی با داده هایی مشابه خروجی اسکریپت؟
    اگه بله کافیه یک جدول ایجاد کنید که دارای دو ستون باشه به شکل زیر
    CREATE TABLE Sample (ID integer NOT NULL PRIMARY KEY, Value integer NOT NULL);

    سپس کافیه سطرهای خروجی اسکریپت رو یکجا در جدول درج کنیم شبیه این کد که 10 هزار سطر اول رو در جدول Sample ذخیره میکنه:
    declare @t table(i int)
    insert into @t
    select top(10000) row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c

    INSERT INTO Sample
    select i,
    case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250)
    from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @t
    )d


    چون ما در اینجا هم مقادیر یک تا یک میلیون رو میتونیم تولید کنیم نیازی نیست که از قبل داده ای در جدول Sample بوده باشد.

  20. #20

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    محمد جان با فرض اينكه table ي از قبل داريم كه ستون i اون پر شده و فقط ستون رو بايد بهش اضافه كنيم بايد چيكار كنم؟
    چون مقدار ستون i اون جدولي كه از قبل وجود داره ممكنه از 1000001 شروع بشه و مثل همون تصاويري كه تو پست 6 گذاشتم.

  21. #21

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    نقل قول نوشته شده توسط saeed6162 مشاهده تاپیک
    محمد جان با فرض اينكه table ي از قبل داريم كه ستون i اون پر شده و فقط ستون رو بايد بهش اضافه كنيم بايد چيكار كنم؟
    چون مقدار ستون i اون جدولي كه از قبل وجود داره ممكنه از 1000001 شروع بشه و مثل همون تصاويري كه تو پست 6 گذاشتم.
    سوال 1: چرا باید به جای مقدار 1 مقدار 1000001 در جدول درج بشه؟ یعنی این جزئی از برنامتون هست و دلیل خاصی داره؟
    سوال 2: آیا ممکن است بخواهین دائما مقادیر ستون جدید رو بروز رسانی کنید (بر اساس متغیر هایی چون 8، 250 و یک میلیون)؟

  22. #22

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    پاسخ 1) آره محمد جان همونطوري كه تصوير هم ديدي ، جزو مساله اصلي بود
    پاسخ 2) اگه قرار باشه كه تغيير داشته باشه ،كد خيلي زياد تغيير مي كنه؟ چون query ي كه قرار اجرا بشه توسط برنامه توليد ميشه؛ ميشه از متغيرهاي همون زبان برنامه نويسي ، مثلا دلفي اعداد 8 و 250 رو تو query تغيير داد و اجرا كرد و قابل حل هست.

  23. #23

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    پاسخ شما بدون در نظر گرفتن جواب سوالات پست قبلی:
    بروز رسانی بر اساس جوین (update based on join):
    your_table:جدولی که دارای یک ستون با مقادیر 1000001 تا 1000000 می باشد
    column0: ستونی که در خط قبل توضیح داده شد
    value: ستون محاسباتی که باید مقادیرش بروز رسانی بشه بر اساس ستون column0
    Numbers: جدول اعداد دارای یک ستون (به نام i) با مقادیر 1 تا 1 میلیون

    UPDATE YT
    SET YT.value = C.radif
    FROM your_table AS YT
    INNER JOIN (select i,case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif

    from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from Numbers
    WHERE i <= 1000000
    )d
    )c
    ON CASE WHEN YT.column0 = '1000000' THEN 1000000 ELSE SUBSTRING(column0, 2, 6) END = c.i;


    پاسخ 2) اگه قرار باشه كه تغيير داشته باشه ،كد خيلي زياد تغيير مي كنه؟
    اصلا کد(کوئری) با متغیرها مشکلی نداره. منظور اینه که شما میتونید مقادیر 8 و 250 رو به عنوان پارامتر به کوئری بدین. یک SP بسازین که دارای این پارمتر ها باشه و بس.
    فقط یادت نره قبلش باید یک جدول اعداد بسازین به این جا رجوع کنید:
    آخرین ویرایش به وسیله محمد سلیم آبادی : دوشنبه 11 دی 1391 در 12:05 عصر

  24. #24

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    محمد ممنون بابتي كمكي كه كردي براي نوشتن اين كوئري ، مشكلم رو حل كرد ، اما الان نياز دارم كه يخورده تغييرش بدم.
    اين كوئري براي همه ركوردها با يك فرمول عمل مي كنه در حالي كه الان لازم دارم براي تعدادي از ركوردهاي جدول كه هميشه در انتهاي جدول هستند و تعدادشون كمتر از 2000 تا هم هست با مقادير ديگه اي حساب كنه يعني 2000 و 250 و 249 كه تو كد استفاده شده اعداد ديگه اي باشن
    كدي كه الان من دارم استفاده مي كنم اينه :

    declare @Numbers table(i int)
    insert into @Numbers
    select top 985977 row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c
    UPDATE YT SET YT.r2 = C.radif
    FROM (select * , ROW_NUMBER() OVER(ORDER BY [dav])AS ROWNUM
    from [MakeRadifMajazi].[dbo].[rdf])AS YT
    INNER JOIN( select i,case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
    from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @NUMBERS
    WHERE i <= 985977
    )d
    )c ON
    [YT].ROWNUM = c.i



    مثلا تو اين مثال براي 1977 تاي آخر لازمه كه عدد 2000 تغيير بكنه به 1977 و 255 تغيير بكنه 247 و 249 تغيير بكنه به 246 ؛ فكر مي كنم نياز به يك شرط هست كه وقتي مقدار i بيشتر از 984000 شد از مقاديري كه گفتم جهت محاسبه استفاده كنه اين شرط رو بايد كجا نوشت؟
    آخرین ویرایش به وسیله saeed6162 : سه شنبه 03 بهمن 1391 در 10:13 صبح

  25. #25

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    از دوتا query استفاده کن. یکی برای 1977 تای آخر و یکی برای سایر سطرها. بعد این دو query را با هم اجتماع (union) کن.
    وبلاگ من (Advanced SQL Querying)

  26. #26

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    محمد فكر ميكنم بعد از دستور inner join بايد شرط قرار داد فقط جاي شرط رو برام مشخص كن كه كجا باشه خودم مقدارگذارهاش رو مي تونم انجام بدم

  27. #27

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    در query دوم که بعد از union all اومده 1977 سطر آخر رو بدست بیاره و اعداد مورد نظر رو لحاظ کن، البته فراموش نکن که 1977 سطر آخر در query اول انتخاب نشن.
    declare @Numbers table(i int)
    insert into @Numbers
    select top 985977 row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c

    ;with YT as
    (
    select *, ROW_NUMBER() OVER(ORDER BY [dav])AS ROWNUM
    from [MakeRadifMajazi].[dbo].[rdf]
    )
    UPDATE YT
    SET YT.r2 = C.radif
    FROM YT
    INNER JOIN( select i,case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
    from (
    select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @NUMBERS
    WHERE i <= 985977
    )d

    union all

    select i,case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
    +case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
    from (
    select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
    from @NUMBERS
    WHERE i <= 985977
    )d
    )c ON
    [YT].ROWNUM = c.i
    وبلاگ من (Advanced SQL Querying)

  28. #28

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    كوئري دوم كه دقيقا عين كوئري اوله چطور 1977 تاي آخر رو محاسبه مي كنه ؟ آيا منظورت اين بود كه خودم شرط WHERE i <= 985977 رو تغيير بدم؟

  29. #29

    نقل قول: نوشتن Stored Procedure ي جهت Code Generation با استفاده از Dynamic Array

    من گفتم خودت ترتیبشو بده بله باید شرط رو تغییر بدین همچنین اعداد مورد نظر 2000 به 1977 ....
    وبلاگ من (Advanced SQL Querying)

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

  1. آموزش استفاده و نوشتن Stored Procedure ها در #C !؟
    نوشته شده توسط __Genius__ در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 5
    آخرین پست: پنج شنبه 25 شهریور 1389, 16:46 عصر
  2. نوشتن stored procedure
    نوشته شده توسط myexir در بخش SQL Server
    پاسخ: 3
    آخرین پست: سه شنبه 30 مهر 1387, 19:04 عصر
  3. نوشتن stored procedure
    نوشته شده توسط myexir در بخش SQL Server
    پاسخ: 1
    آخرین پست: سه شنبه 16 مهر 1387, 18:02 عصر
  4. سوال: نوشتن stored procedure حرفه ای
    نوشته شده توسط AmirAlimadadi در بخش SQL Server
    پاسخ: 4
    آخرین پست: چهارشنبه 19 تیر 1387, 12:55 عصر
  5. نوشتن stored procedure با مقدار بازگشتی
    نوشته شده توسط steager64 در بخش SQL Server
    پاسخ: 3
    آخرین پست: یک شنبه 15 اردیبهشت 1387, 11:40 صبح

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

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