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

نام تاپیک: پاک شدن یک رکورد بعد از 0 شدن فیلد

  1. #1
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    Question پاک شدن یک رکورد بعد از 0 شدن فیلد

    سلام
    من میخوام بعد از اینکه یک فیلد که از نوع int هست مقدار 0 گرفت سطر مربوطه پاک بشه.
    چه کار باید بکنم؟

  2. #2

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    از تریگر استفاده کنید

  3. #3
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    با تریگر میتوند این کار کنید.
    ولی من هنوظ نتونستم مقدار قبلی متغیر بروز شده را بگیرم.
    https://barnamenevis.org/showthread.p...F%D8%B1-UPDATE

  4. #4

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط fakhravari مشاهده تاپیک
    با تریگر میتوند این کار کنید.
    ولی من هنوظ نتونستم مقدار قبلی متغیر بروز شده را بگیرم.
    https://barnamenevis.org/showthread.p...F%D8%B1-UPDATE
    مقدار قبلی متغییر بروز شده در جدول deleted وجود داره.

  5. #5
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    CREATE TABLE [dbo].[Student](
    [Name] [nvarchar](50) NULL,
    [Numre] [int] NULL,
    [ID] [bigint] IDENTITY(1,1) NOT NULL)



    create TRIGGER [dbo].[Chek0]
    ON [dbo].[Student]
    AFTER Update
    AS
    BEGIN
    SET NOCOUNT ON;
    if (COLUMNS_UPDATED()> 0)
    begin
    declare @ID bigint;declare @Numre int;
    select @ID = ID from INSERTED
    set @Numre = (SELECT [Numre] FROM INSERTED)
    if @Numre = 0
    begin
    delete from Student where ID = @ID
    END
    END
    END


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

  6. #6
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط hassan_reza مشاهده تاپیک
    مقدار قبلی متغییر بروز شده در جدول deleted وجود داره.
    بله درسته قبلی در deleted و بعدی در INSERTED

  7. #7
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    TRIGGER چیه؟
    من الان یه تریگر با همین کدها نوشتم با توجه به ستونهای جدولم ولی چرا اعمال نمیشه؟
    اینم تریگرمه:

    CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
    ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
    AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    if (COLUMNS_UPDATED()> 0)
    begin
    declare @ID bigint;declare @value int;
    select @ID = ID from INSERTED
    set @value = (SELECT [@value] FROM INSERTED)
    if @value = 0
    begin
    delete from Table_1 where ID = @ID
    END
    END
    GO


    جداول inserted و deleted کجا هستند؟ وچه کاربردی دارن؟
    آخرین ویرایش به وسیله reza69 : جمعه 29 دی 1391 در 08:59 صبح

  8. #8
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    inserted و deleted مقدار خروجی رکورد هستند که تغیرات روس اعمال شده.
    تست بزن
    CREATE TRIGGER [Chek0]
    ON Table_1
    AFTER Update
    AS
    BEGIN
    SET NOCOUNT ON;
    if (COLUMNS_UPDATED()> 0)
    begin
    declare @ID bigint;declare @value int;
    select @ID = ID from INSERTED
    set @value = (SELECT [@value] FROM INSERTED)
    if @value = 0
    begin
    delete from Table_1 where ID = @ID
    END
    END
    END

  9. #9
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    ارور میده و از @value ایراد میگیره
    1.JPG
    بعد از اجرا هیچی تو جدول پاک نمیشه.
    اینم جدولم:
    2.JPG
    بعد از اینکه کد رو مینویسی داخل تریگر باید چه کارهایی بکنی که به جدول اعمال بشه؟ میشه مرحله به مرحله بگید؟

  10. #10
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    این قسمت تصحیح کنید
    set @value = (SELECT [@value]  FROM INSERTED)

    set @value = (SELECT [value]  FROM INSERTED)

    @ نیاز نیست در SELECT .
    بعد f5 بزنید تا تریگر ساخته شود.
    بعد با هر دستکاری مقادیر این تریگر چک میشود روی تغیرات فقط
    عکس های ضمیمه عکس های ضمیمه

  11. #11
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    خیلی ممنون انجام شد.
    یه سوال : رکوردی که پاک میشه چجوری با استفاده از تریگر deleted باید بازگردانی بشه؟

  12. #12

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    سلام.
    متاسفانه یکی از اشتباهاتی که عموم افراد مرتکب میشن اینه که فرض می کنن جداول INSERTED و DELETED نمی تونن حاوی بیش از یک Record باشن. این فرض اشتباه هستش و منجر به نوشتن کدهای نادرست میشه. کدی که شما نوشتید نیز کد صحیحی نیست و ایرادهای فراوانی داره. از این گذشته، شما باید در Business Logic خودتون وقتی متوجه شدید که مقدار فیلد صفر شده، دیگه اون فیلد رو Update نکنید، بلکه یک ضرب Delete اش کنید تا بدین ترتیب نیازی به نوشتن Trigger نیز نداشته باشید.

    موفق باشید.

  13. #13
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    سلام اقای موسوی
    خب اینو مپسپوریم به تریگر .
    اره از نظر شما باید در برنامه شرط بزاریم که true شد اونو رکورد حذف کنه.
    در کل منظور شما همین بود دیگه

  14. #14
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    متاسفانه یکی از اشتباهاتی که عموم افراد مرتکب میشن اینه که فرض می کنن جداول INSERTED و DELETED نمی تونن حاوی بیش از یک Record باشن. این فرض اشتباه هستش و منجر به نوشتن کدهای نادرست میشه. کدی که شما نوشتید نیز کد صحیحی نیست و ایرادهای فراوانی داره. از این گذشته، شما باید در Business Logic خودتون وقتی متوجه شدید که مقدار فیلد صفر شده، دیگه اون فیلد رو Update نکنید، بلکه یک ضرب Delete اش کنید تا بدین ترتیب نیازی به نوشتن Trigger نیز نداشته باشید.
    موفق باشید.
    میشه همه ایراداشو بگید؟با دلیل
    خب این کد هم یکجا حذف میکنه دیگه.
    چجوری بدون استفاده از تریگر این عملیات رو انجام بدیم؟ حالا اگه از تریگر استفاده کنیم چی میشه؟

  15. #15
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط reza69 مشاهده تاپیک
    میشه همه ایراداشو بگید؟با دلیل
    خب این کد هم یکجا حذف میکنه دیگه.
    چجوری بدون استفاده از تریگر این عملیات رو انجام بدیم؟ حالا اگه از تریگر استفاده کنیم چی میشه؟
    از داخل برنامه یه دستور دلیت دیگه

  16. #16

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط reza69 مشاهده تاپیک
    سلام
    من میخوام بعد از اینکه یک فیلد که از نوع int هست مقدار 0 گرفت سطر مربوطه پاک بشه.
    چه کار باید بکنم؟
    سلام،
    اصلا چرا باید درج بشه که بخواد بعدا پاک بشه؟!
    به هر حال یک قید check روی ستون مذکور قرار بدین که مانع از گرفتن مقدار صفر بشه.

    ALTER TABLE table_name 
    ADD CONSTRAINT checker
    CHECK (column_name <> 0);
    آخرین ویرایش به وسیله محمد سلیم آبادی : شنبه 30 دی 1391 در 18:50 عصر
    وبلاگ من (Advanced SQL Querying)

  17. #17
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط msalim مشاهده تاپیک
    سلام،
    اصلا چرا باید درج بشه که بخواد بعدا پاک بشه؟!
    [/SQL]
    دوست من این مقدار ستون در ابتدا صفر نیست ولی به تدریج موقعی که صفر میشه دیگه این رکورد در برنامه کارایی نداره و باید پاک شه.
    این مقدار اجناس داخل انباره به تدریج که جنسهامونو میفروشیم و تموم میشه باید رکورد این کالا از جدول حذف بشه.
    OK?

  18. #18
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    چجوری بدون استفاده از تریگر این عملیات رو انجام بدیم؟ حالا اگه از تریگر استفاده کنیم چی میشه؟

  19. #19

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط reza69 مشاهده تاپیک
    میشه همه ایراداشو بگید؟با دلیل خب این کد هم یکجا حذف میکنه دیگه. چجوری بدون استفاده از تریگر این عملیات رو انجام بدیم؟ حالا اگه از تریگر استفاده کنیم چی میشه؟
    نقل قول نوشته شده توسط reza69 مشاهده تاپیک
    چجوری بدون استفاده از تریگر این عملیات رو انجام بدیم؟ حالا اگه از تریگر استفاده کنیم چی میشه؟
    سلام.
    من نگفتم 100% از Trigger استفاده نکنید، برخی اوقات بنا به دلائل مختلف مجبورید اینکارو کنید؛ مساله این هستش که اگر میتونید ازش پرهیز کنید، اینکارو کنید. در مورد شما، بنظر میرسه اینکار بسادگی در Business Logic Layer میسر باشه. به بیان دیگه، وقتی در کدتون متوجه میشید که فیلد مورد نظر از اون رکورد باید به صفر Update بشه، جای اینکه دستور UPDATE رو به SQL Server ارسال کنید، دستور DELETE رو ارسال کنید تا رکورد مورد نظر حذف بشه.

    در مورد اون Trigger هم به گمان اصل مساله رو توضیح دادم، مشکل اصلی این هستش که فرض شده جدول DELETED حاوی یک Record هستش (در حالیکه میتونه اینطور نباشه). به گمانم با این توضیح میتونید Trigger نوشته شده رو تغییر بدید و ازش استفاده کنید. اما باز هم اگر موفق نشدید لطفا بگید تا اینکارو براتون انجام بدم.

    موفق باشید.

  20. #20
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    دوست عزیز من
    مشگل جدید من اینکه میخوام رکوردی که به اشتباه حذف شده به جدولم برگردونم و نمیدونم کدش چجوری میشه؟ حالا با تریگر یا بدون اون نمیدونم.
    ببینید این قطعه کد کمک میکنه؟ اگه شما کدی دارید که با استفاده از پروسیجر یا تریگر این کارو میکنه بگید. جدولم 2 تا ستون id و name داره.

    AFTER DELETE
    AS
    BEGIN
    SET NOCOUNT ON;
    declare @ID int;declare @name nvarchar;
    set @ID = (SELECT @ID FROM DELETED)

    set @name = (SELECT name FROM DELETED)
    Insert Into mytable ([Log]) values(@Name +' '+CAST(@ID as nvarchar)+' : [AFTER DELETE]');


  21. #21
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    خب دستور دلیت که نباید اشتباه بشه. کاربر باید بفهم خودش دیگه.
    با دستورات بالا یک جدول لاگ دارید که کپی رکورد در جدول لاگ درج میکنه.

  22. #22
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,029

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    در مورد اون Trigger هم به گمان اصل مساله رو توضیح دادم، مشکل اصلی این هستش که فرض شده جدول DELETED حاوی یک Record هستش (در حالیکه میتونه اینطور نباشه). به گمانم با این توضیح میتونید Trigger نوشته شده رو تغییر بدید و ازش استفاده کنید. اما باز هم اگر موفق نشدید لطفا بگید تا اینکارو براتون انجام بدم.
    موفق باشید.
    اقای موسوی پس بعضی اوقاط خالی میده خب چاره چی هست

  23. #23
    کاربر دائمی آواتار reza69
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همدان
    پست
    788

    نقل قول: پاک شدن یک رکورد بعد از 0 شدن فیلد

    نقل قول نوشته شده توسط fakhravari مشاهده تاپیک
    خب دستور دلیت که نباید اشتباه بشه. کاربر باید بفهم خودش دیگه.
    با دستورات بالا یک جدول لاگ دارید که کپی رکورد در جدول لاگ درج میکنه.
    حالا شاید کاربر اشتباهی یه رکورد رو دلیت کنه آدم باید فکر همه جای برنامه رو بکنه دیگه حالا بگذریم.
    این کد فقط برای تریگر هست؟
    من یه کدی میخوام برای پروسیژر.

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

  1. اجرا شدن کد جاوااسکریپت بعد از لود شدن صفحه
    نوشته شده توسط mahdi.manian در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 4
    آخرین پست: پنج شنبه 28 دی 1391, 13:07 عصر
  2. visible کردن یا پاک کردن یک مقدار بعد از انتخاب شدن
    نوشته شده توسط omid_kimia در بخش T-SQL
    پاسخ: 2
    آخرین پست: چهارشنبه 24 فروردین 1390, 23:10 عصر
  3. قدیمی شدن ظاهر فرم بعد از child شدن
    نوشته شده توسط Rmath_m در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 09 بهمن 1389, 02:05 صبح
  4. بسته شدن يك فرم بعد از باز شدن فرم ديگر
    نوشته شده توسط alen332 در بخش C#‎‎
    پاسخ: 14
    آخرین پست: یک شنبه 07 شهریور 1389, 13:08 عصر
  5. پاسخ: 8
    آخرین پست: شنبه 09 خرداد 1388, 11:37 صبح

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

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