PDA

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 تقریبا فرقی نداره. :چشمک: