با سلام
TRUNCATE TABLE News_Cities
چرا جداول بعضی اوقاط خطا کلید میدهد
because it is being referenced by a FOREIGN KEY constraint.
در صورتی که من از ID استفاده نمی کنم در جایی
با سلام
TRUNCATE TABLE News_Cities
چرا جداول بعضی اوقاط خطا کلید میدهد
because it is being referenced by a FOREIGN KEY constraint.
در صورتی که من از ID استفاده نمی کنم در جایی
دیاگرام هم وصل نکردهاید؟
چرا دیاگرام داره
وقتی دیاگرام ایجاد میکنید کلیدهای خارجی متناظر آنها به صورت خودکار ایجاد میشوند.
خب درست .
راهکار چی هست.
به هر حال دیاگرام لازم است .
چون تعجب من اینه که کلیدی در جدولی استفاده نشده که نتونه حذفش کنه.
سلام.
شما وقتی دارید از Foreign key استفاده میکنید نمیتوانید از دستور Truncate استفاده کنید. دوکار میتوانید انجام دهید.
یا با استفاده از دستور Alter ابتدا Foreign key رو حذف کرده بعد دستور Truncate رو اجرا کنید.
یا اینکه از دستور Delete استفاده کرده و اگر یکی از فیلدهاتون از نوع Identity هست با استفاده از دستورات DBCC ChekIdent مقدار اونو Reset کنید.
Telegram : @SQL_Server
برای تکمیل پست.
معرفی دستور DELETE:
با این دستور حتما آشنا هستید. این دستور استاندارد جهت حذف اطلاعات (یا به عبارت درست تر، داده ها) از یک جدول استفاده می شود.
کاربرد این دستور معمولا به دو شکل زیر می باشد.
1. DELETE FROM MyTable
2. DELETE FROM MyTable WHERE ID < 100
در کاربرد نوع اول، تمام داده های موجود در جدول MyTable حذف شده و در دستور دوم فقط داده هایی حذف می شوند که شرط مورد نظر در مورد آن ها برقرار باشد.
معرفی دستور TRUNCATE:
دستور TRUNCATE یک دستور غیر استاندارد می باشد که جهت حذف تمامی داده های موجود در جدول استفاده می شود.
کاربرد این دستور به شکل زیر می باشد.
TRUNCATE TABLE MyTable
مقایسه دستورات DELETE و TRUNCATE:
- دستور TRUNCATE بر خلاف دستور DELETE نمی تواند دارای شرط باشد. به عبارت دیگر شما نمی توانید عبارت WHERE را همراه این دستور بکار ببرید.
- دستور TRUNCATE به صورت کمینه (Minimally) لاگ می شود در حالیکه دستور DELETE به صورت کامل لاگ می شود. بنابراین دستور TRUNCATE بسیار سریع تر از دستور DELETE عمل می کند. به طوریکه اگر جدول مورد نظر شامل میلیون ها رکورد باشد، با استفاده از دستور TRUNCATE ظرف چند ثانیه کل داده ها حذف می شوند در صورتی که با استفاده از دستور DELETE این عمل می تواند دقیقه ها و حتی ساعت ها طول بکشد.
- اگر جدول ما حاوی فیلدی از نوع Identity باشد، پس از اجرای دستور TRUNCATE مقدار این فیلد Reset شده و به مقدار اولیه خود برمی گردد، در حالی که در مورد دستور DELETE چنین نیست.
- اگر جدولی که قصد داریم داده های آن را حذف کنیم، توسط جداول دیگر ارجاع گرفته شده باشد یعنی فیلد کلید اصلی این جدول در جداول دیگری به عنوان کلید خارجی مورد استفاده قرار گرفته باشد، دیگر نمی توان از دستور TRUNCATE جهت حذف داده های این جدول استفاده نمود. حتی اگر جداول دیگر خالی بوده باشند و یا حتی اگر کلید های خارجی را غیر فعال (Disable) کنیم، باز هم نمی توانیم از دستور TRUNCATE استفاده کنیم و حتما باید روابط (Relations) را حذف کنیم تا بتوانیم از این دستور استفاده بکنیم. به طور مثال اگر جداول Order و OrderDetais را در نظر بگیریم، تا زمانی که بین این دو جدول رابطه وجود دارد، نمی توان دستور TRUNCATE رو روی جدول Order اجرا نمود.
تذکر مهم:
با توجه به اینکه دستور TRUNCATE بسیار سریع می باشد، میزان خطر آن به اندازه دستور DROP می باشد و استفاده اشتباه از آن می تواند منجر به فاجعه شود. بنابراین هنگام استفاده از این دستور دقت کافی را داشته باشید.
با سلام و خسته نباشید
از جناب آقای مهندس حمیدرضا صادقیان و همچنین جناب آقای fakhravari از مطالب بسیار مفیدشون واقعا ممنونم
با تشکر