View Full Version : سوال: درج اطلاعات یک جدول در یک جدول جدید هنگام حذف جدول
HosseinProgrammer
جمعه 29 آبان 1388, 18:06 عصر
سلام.
یک سوال! اسکریپتی میخوام که بتونه وقتی جدول 1 میخواد پاک بشه ، اول اطلاعاتش رو بریزه توی جدول 2 و سپس جدول 1 رو پاک کنه.
ممنون میشم اگه جوابمو بدین.
Reza.ariyan
جمعه 29 آبان 1388, 21:40 عصر
اگه منظورتون پا کردن داده های یه جدول هیت هم میتونید با تریگر این کار رو انجام بدید و هم میتونید قبل از پاک شدن داده ها این کارو انجام بدید به این صورت :
تریگر
CREATE TRIGGER [tr_DeleteTable_1] ON [dbo].Table_1
FOR DELETE
AS
insert into tblBakup(select * from Table_1)
قبل از پاک کردن داده های جدول
insert into tblBakup(select * from Table_1)
ولی اگه منظورتون حذف جدوله که یه راه بیشتر ندارید که بازم اینه :
قبل از حذف جدول
insert into tblBakup(select * from Table_1)
HosseinProgrammer
شنبه 30 آبان 1388, 08:57 صبح
سلام دوست عزیز. ممنون از پاسختون.
من منظورم drop شدن جدول بود. برای این موضوع راه حلی دارید؟
ضمنا کد شما رو نوشتم. هنگام delete from table_1 ، داده ها را در جدول دوم درج نمیکنه. از insert * into newtable هم استفاده کردم و در این حالت فقط جدول جدید رو می سازه و داده ای رو توی اون درج نمیکنه. خلاصه به این نتیجه رسیدم که بعد از عمل پاک شدن، عبارت بعد از AS رو اجرا میکنه. مثلا نوشتم که select * from Table_1 که در این حالت ، خروجی دارای هیچ رکوردی نبود.
ممنون.
Reza.ariyan
شنبه 30 آبان 1388, 12:46 عصر
سلام دوست عزیز. ممنون از پاسختون.
من منظورم drop شدن جدول بود. برای این موضوع راه حلی دارید؟
ممنون.
اول Insert و بعد حذف
insert into tblBakup(select * from Table_1)
DROP TABLE Table_1
HosseinProgrammer
شنبه 30 آبان 1388, 13:01 عصر
منظور من اینه که این عملیات بصورت اتوماتیک انجام بشه و نه دستی. یعنی هر وقت که یکی (عمدا با سهوا) جدول رو پاک کنه ، از اطلاعات یک کپی در جدول دیگر نگهداری شود.
اگر به سوال دوم پست قبلیم هم جواب بدین ممنون میشم.
Reza.ariyan
شنبه 30 آبان 1388, 13:40 عصر
فکر نمیکنم روشی برای این کار باشه
کدوم سوال دوم ؟
HosseinProgrammer
شنبه 30 آبان 1388, 18:05 عصر
ضمنا کد شما رو نوشتم. هنگام delete from table_1 ، داده ها را در جدول دوم درج نمیکنه. از insert * into newtable هم استفاده کردم و در این حالت فقط جدول جدید رو می سازه و داده ای رو توی اون درج نمیکنه. خلاصه به این نتیجه رسیدم که بعد از عمل پاک شدن، عبارت بعد از AS رو اجرا میکنه. مثلا نوشتم که select * from Table_1 که در این حالت ، خروجی دارای هیچ رکوردی نبود.
منظورم این بود.
Reza.ariyan
شنبه 30 آبان 1388, 21:49 عصر
درسته
بعد از عمل Delete تریگر اجرا میشه
ولی میتونی تریگر Insert بنویسی که همیشه یه بکاپ از جدولت داشته باشی و موقع حذف مجبور نباشی بکاپ بگیری
CREATE TRIGGER [tr_DeleteTable_1] ON [dbo].Table_1
FOR INSERT
AS
insert into tblBakup(select top 1 * from Table_1)
اینطوری هر داده ای که تو جدول Table_1 ثبت میشه یه کپی ازش تو جدول بک آپ وارد میشه
HosseinProgrammer
یک شنبه 01 آذر 1388, 15:23 عصر
مثل تاپیک دیگه که سوال رو کامل نوشتم، اینجا هم میگم که یکی از اساتید دانشگاه به دوستم گفته که "یک اسکریپتی به زبان MySQL بنویس که وقتی جدول 1 رو پاک کردی ، داده هایش از بین نرود و در جدول دیگری ذخیره شود."
در قسمت MySQL سوال کردم ولی جوابی ندادند. برای همین اینجا سوال کردم چون Syntax SQL Server و MySQL تقریبا فرقی نداره. :چشمک:
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.