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

نام تاپیک: مشكل با اين پروسيجر

  1. #1
    کاربر دائمی آواتار majidmir
    تاریخ عضویت
    اردیبهشت 1387
    سن
    34
    پست
    199

    Question مشكل با اين پروسيجر

    سلام
    يه ورسيجر نوشتم كه فاكتور رو محاسبه كنه الان يه مشكل كوچيك دارم . مشكلم اينه كه بعد از محاسبه ء هزينه اونو نميدونم بايد چطوري توي برنامه insert كنم در حالي كه اون متغير رو هم تعريف كردم ؟‌ اين هم كد


    CREATE PROCEDURE M_K_Kharid_INSERT
    @cod as int,
    @codkala as int,
    @codmoshtari as int ,
    @noaekharid as nchar(10),
    @takhfif as money,
    @date1 as datetime
    /*متغير هايي جهت انجام عمليات مشتق*/
    AS
    declare @price as money
    /* جهت جلوگيري از ورود مقادير تكراري */
    if (select count(*) from kharidmoshtari where (cod=@cod and @codkala=codkala and @codmoshtari=codmoshtari and @noaekharid=noaekharid and @takhfif=takhfif and @date1=date1))=0
    begin
    -----------------------------------------------------------------
    --محاسبه هزينه فاكتور
    select kharidmoshtari.tedad,sum(kala.ghamatfo*kharidmosht ari.tedad)as price,kharidmoshtari.cod from kala join kharidmoshtari
    on
    kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad,kala.ghamatfo,kharidmoshtari. cod
    -- به اين خط گير ميده ؟
    price=@price
    -----------------------------------------------------------------
    insert into kharidmoshtari (codkala,codmoshtari,noaekharid,takhfif,date1,pric e1) values(@codkala,@codmoshtari,@noaekharid,@takhfif, @date1,@price)
    return 1
    end
    else
    return 0
    GO


    یادداشت:
    برای قرار دادن کد همیشه بایستی از تگ کد یا تک source استفاده کرد. نه نقل قول.
    آخرین ویرایش به وسیله محمد سلیم آبادی : پنج شنبه 06 خرداد 1389 در 19:35 عصر

  2. #2

    نقل قول: مشكل با اين پروسيجر


    CREATE PROCEDURE M_K_Kharid_INSERT
    @cod as int,
    @codkala as int,
    @codmoshtari as int ,
    @noaekharid as nchar(10),
    @takhfif as money,
    @date1 as datetime
    AS
    declare @price as money
    if (select count(*) from kharidmoshtari where (cod=@cod and @codkala=codkala and @codmoshtari=codmoshtari and @noaekharid=noaekharid and @takhfif=takhfif and @date1=date1))=0
    begin
    insert into kharidmoshtari (codkala,codmoshtari,noaekharid,takhfif,date1,pric e1)
    select @codkala,@codmoshtari,@noaekharid,@takhfif, @date1, sum(kala.ghamatfo*kharidmoshtari.tedad) as price
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod

    return 1
    end
    else
    return 0
    GO


    وبلاگ من (Advanced SQL Querying)

  3. #3
    کاربر دائمی آواتار majidmir
    تاریخ عضویت
    اردیبهشت 1387
    سن
    34
    پست
    199

    نقل قول: مشكل با اين پروسيجر

    سلام دوست عزيز من اين پروسيجر رو الان كه تحليل كردم چند قسمتش واسم نااشناست مشه توضيح بديد چكار كرديد

    1- value اين تابع چطوري مقدار گرفته در حالي كه اصلا ننوشتيد ؟
    2- مقدار price چطوري مقدار دهي شده است ‌؟

    اگه ميشه يه توضيح كامل بديد ببينم چكار كرديد‌؟
    آخرین ویرایش به وسیله majidmir : پنج شنبه 06 خرداد 1389 در 15:13 عصر

  4. #4

    نقل قول: مشكل با اين پروسيجر

    نقل قول نوشته شده توسط majidmir مشاهده تاپیک
    دوست عزيز ايني كه نوشتي values نداره ؟
    مشه بيشتر در موردش توضيح بدي ؟
    برای درج از چند Syntax متفاوت می شود استفاده کرد. یکی از آنها که استاندارد زبان SQL هست دارای VALUES می باشد.

    من از دستور INSERT INTO SELECT برای درج استفاده کرده ام.
    وبلاگ من (Advanced SQL Querying)

  5. #5
    کاربر دائمی آواتار majidmir
    تاریخ عضویت
    اردیبهشت 1387
    سن
    34
    پست
    199

    نقل قول: مشكل با اين پروسيجر

    ميشه از syntax ‌
    insert into value استفاده كني اونجوري قابل فهم تر هستش

  6. #6
    کاربر دائمی آواتار majidmir
    تاریخ عضویت
    اردیبهشت 1387
    سن
    34
    پست
    199

    نقل قول: مشكل با اين پروسيجر

    با اين تفاسير دستور update رو بايد اينطوري بنويسم ؟‌
    CREATE PROCEDURE M_K_Kharid_UPDATE
    @cod as int,
    @codkala as int,
    @codmoshtari as int ,
    @noaekharid as nchar(10),
    @takhfif as money,
    @date1 as datetime
    AS
    declare @price as money
    /*ايا چنين ركوردي وجود دارد ؟ */
    if (select count(*) from kharidmoshtari where @cod=cod)>0
    begin
    /* جهت جلوگيري از ورود مقادير تكراري */
    if (select count(*) from kharidmoshtari where (cod=@cod and @codkala=codkala and @codmoshtari=codmoshtari and @noaekharid=noaekharid and @takhfif=takhfif and @date1=date1))=0
    begin

    update kharidmoshtari set codkala,codmoshtari,noaekharid,takhfif,date1,price 1

    select @codkala,@codmoshtari,@noaekharid,@takhfif, @date1, sum(kala.ghamatfo*kharidmoshtari.tedad) as price
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod

    return 1
    end
    end
    else
    return 0
    GO

    كه خطا ميده و موقعي كه اينجوري هم مينويسم بازم خطا ميده ؟‌
    CREATE PROCEDURE M_K_Kharid_UPDATE
    @cod as int,
    @codkala as int,
    @codmoshtari as int ,
    @noaekharid as nchar(10),
    @takhfif as money,
    @date1 as datetime
    AS
    declare @price as money
    /*ايا چنين ركوردي وجود دارد ؟ */
    if (select count(*) from kharidmoshtari where @cod=cod)>0
    begin
    /* جهت جلوگيري از ورود مقادير تكراري */
    if (select count(*) from kharidmoshtari where (cod=@cod and @codkala=codkala and @codmoshtari=codmoshtari and @noaekharid=noaekharid and @takhfif=takhfif and @date1=date1))=0
    begin

    update kharidmoshtari set codkala=@codkala,codmoshtari=@codmoshtari,noaekhar id=@noaekharid,takhfif=@takhfif,date1=@date1,price 1

    select @codkala,@codmoshtari,@noaekharid,@takhfif, @date1, sum(kala.ghamatfo*kharidmoshtari.tedad) as price
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod

    return 1
    end
    end
    else
    return 0
    GO

  7. #7

    نقل قول: مشكل با اين پروسيجر

    شما نیاز دارین مقدار مورد نظری که با Query بدست میاورین را به متغیر که قبلا تعریف کردین انتساب بدین. تا بعدا در ماده ی VALUES عبارت INSERT بتوانید استفاده کنید (یا در عبارت UPDATE)، یعنی این شکلی:
    DECLARE @Price MONEY
    SET @Price = (SELECT sum FROM t) --d

    INSERT INTO Table (Price) VALUES(@Price)--d

    UPDATE table
    SET price = @price
    WHER .... -d
    وبلاگ من (Advanced SQL Querying)

  8. #8

    نقل قول: مشكل با اين پروسيجر

    این کد update را امتحان کردین؟
    update kharidmoshtari 
    set codkala=@codkala,
    codmoshtari=@codmoshtari,
    noaekhar id=@noaekharid,
    takhfif=@takhfif,
    date1=@date1,
    price 1 =
    (select sum(kala.ghamatfo*kharidmoshtari.tedad)
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod)


    البته نام ستون price 1 را باید داخل [] قرار بدین تا مشکلی بوجود ندارد. از طرفی بهتره این نام به نام price_1 تغییر نام کند تا کمی استاندارد بشود.
    وبلاگ من (Advanced SQL Querying)

  9. #9
    کاربر دائمی آواتار majidmir
    تاریخ عضویت
    اردیبهشت 1387
    سن
    34
    پست
    199

    نقل قول: مشكل با اين پروسيجر

    نقل قول نوشته شده توسط msalim مشاهده تاپیک
    این کد update را امتحان کردین؟
    update kharidmoshtari 
    set codkala=@codkala,
    codmoshtari=@codmoshtari,
    noaekhar id=@noaekharid,
    takhfif=@takhfif,
    date1=@date1,
    price 1 =
    (select sum(kala.ghamatfo*kharidmoshtari.tedad)
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod)
    البته نام ستون price 1 را باید داخل [] قرار بدین تا مشکلی بوجود ندارد. از طرفی بهتره این نام به نام price_1 تغییر نام کند تا کمی استاندارد بشود.
    سلام
    دوست عزيز از راهنمايهاي خيلي خوبتون كمال تشكر رو دارم !
    مشكل من اينه كه ميخواهم دستور select با دستور insert OR update قاطي نشه و به صورت جدا جدا استفاده بشن و بتونم مقدار price رو در يه متغير بريزم و از اون متغير براي مقدار دهي ها استفاده كنم

  10. #10

    نقل قول: مشكل با اين پروسيجر

    مقدار price رو در يه متغير بريزم و از اون متغير براي مقدار دهي ها استفاده كنم
    در مورد این موضوع که قبلا اشاره کرده بودم!
    پست 7 را نخواندین؟ ابتدا یک متغیر تعریف می کنید از نوع price ای که کوئری محاسبه می کنه. سپس با کمک یک دستوری شبیه به این مقدار برگردانده شده توسط کوئری را به متغیر انتساب میدین سپس از مقدار این متغیر در دستوراتی چون insert و Update استفاده می کنید:
    SET @price =
    (select sum(kala.ghamatfo*kharidmoshtari.tedad)
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod)
    --OR
    SELECT @price = sum(kala.ghamatfo*kharidmoshtari.tedad)
    where cod=@cod
    from kala
    join kharidmoshtari
    on kala.cod=kharidmoshtari.codkala
    group by kharidmoshtari.tedad, kala.ghamatfo, kharidmoshtari.cod)


    امید وارم که مشکلتان حل بشه!
    وبلاگ من (Advanced SQL Querying)

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

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