PDA

View Full Version : حذف تمام رکوردهای table ای که ارتباط یک به چند با جدولهای دیگر دارد؟!



ali190
پنج شنبه 21 مهر 1390, 19:29 عصر
باسلام و عرض خسته نباشید
من با استفاده از دستور TRUNCATE TABLE محتویات یک table رو حذف میکنم
اما با این دستور نمیتونم محتویات table ای که ارتباط یک به چند با سایر table ها رو دارد حذف کنم
از چه راهی میتونم این کار و انجام بدم
(لازم به ذکر اینکه من محتویات سایر جداول فرزند رو حقبلاً حذف کردم و اونا فاقد رکورد هستند)
ممنون
یاعلی

mina_ghorbani
یک شنبه 24 مهر 1390, 16:00 عصر
TRUNCATE TABLE جاهعیتارجاعی رو چک نمی کنه => روي جدولی که MASTER باشدقابل اجرا نیست


برایاونکه کار کنه باید RELATION ها را جذف کرد

یوسف زالی
یک شنبه 24 مهر 1390, 17:11 عصر
دوست من چرا از delete استفاده نمی کنی؟

ali190
دوشنبه 25 مهر 1390, 23:00 عصر
دوست من چرا از delete استفاده نمی کنی؟
سلام
چون میخوام حالت AutoNumber فیلد id ام که از نوع int هست این فیلد عددش ریست بشه و از نو contour بندازه
ممنون
یاعلی

quack
سه شنبه 26 مهر 1390, 06:23 صبح
سلام،

همونطور که دوستمون گفتن باید ریلیشن‌ها حذف بشه، و بعد از دوباره اضافه بشه. اسکریپت زیر می‌تونه کد‌هایی‌ که لازم داری رو برات تولید کنه :



select
DropStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema +
'].[' + ForeignKeys.ForeignTableName +
'] DROP CONSTRAINT [' + ForeignKeys.ForeignKeyName + ']; '
, CreateStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema +
'].[' + ForeignKeys.ForeignTableName +
'] WITH CHECK ADD CONSTRAINT [' + ForeignKeys.ForeignKeyName +
'] FOREIGN KEY([' + ForeignKeys.ForeignTableColumn +
']) REFERENCES [' + schema_name(sys.objects.schema_id) + '].[' +
sys.objects.[name] + ']([' +
sys.columns.[name] + ']) ON DELETE CASCADE; '
from sys.objects
inner join sys.columns
on (sys.columns.[object_id] = sys.objects.[object_id])
inner join (
select sys.foreign_keys.[name] as ForeignKeyName
,schema_name(sys.objects.schema_id) as ForeignTableSchema
,sys.objects.[name] as ForeignTableName
,sys.columns.[name] as ForeignTableColumn
,sys.foreign_keys.referenced_object_id as referenced_object_id
,sys.foreign_key_columns.referenced_column_id as referenced_column_id
from sys.foreign_keys
inner join sys.foreign_key_columns
on (sys.foreign_key_columns.constraint_object_id
= sys.foreign_keys.[object_id])
inner join sys.objects
on (sys.objects.[object_id]
= sys.foreign_keys.parent_object_id)
inner join sys.columns
on (sys.columns.[object_id]
= sys.objects.[object_id])
and (sys.columns.column_id
= sys.foreign_key_columns.parent_column_id)
) ForeignKeys
on (ForeignKeys.referenced_object_id = sys.objects.[object_id])
and (ForeignKeys.referenced_column_id = sys.columns.column_id)
where (sys.objects.[type] = 'U')
and (sys.objects.[name] not in ('sysdiagrams'))

asemoon barooni
سه شنبه 26 مهر 1390, 08:08 صبح
سلام دوست عزیر فقط کافیه اول قیدها رو No چک کنید بعد داده ها رو حذف کنید و دوباره قید ها رو چک کنید کد زیر این کارو برای کل جداول دیتابیس انجام میده:


EXEC


sp_MSForEachTable'ALTER TABLE ? NOCHECK CONSTRAINT ALL'


EXEC


sp_MSForEachTable'DELETE FROM ?'


EXEC


sp_MSForEachTable'ALTER TABLE ? CHECK CHECK CONSTRAINT ALL'


EXEC


sp_msforeachtable'DBCC CHECKIDENT (''?'', RESEED,0)'

ali190
سه شنبه 26 مهر 1390, 19:58 عصر
متاسفانه مطالب دو پست قبل رو متوجه نشدم
منظور پست 5 رو متوجه نشدم چون اصلاً نمیدونم اسکریپت چیه و چطور اجرا میشه
در پست 6 هم کدها قابل فهم نیست.
ممنون
یاعلی

oliya24
سه شنبه 26 مهر 1390, 21:36 عصر
سلام دوست عزیر فقط کافیه اول قیدها رو No چک کنید بعد داده ها رو حذف کنید و دوباره قید ها رو چک کنید کد زیر این کارو برای کل جداول دیتابیس انجام میده:

EXEC

sp_MSForEachTable'ALTER TABLE ? NOCHECK CONSTRAINT ALL'


EXEC

sp_MSForEachTable'DELETE FROM ?'

EXEC

sp_MSForEachTable'ALTER TABLE ? CHECK CHECK CONSTRAINT ALL'

EXEC

sp_msforeachtable @command1 ='DBCC CHECKIDENT (''?'', RESEED,0)'







دوست عزیز لطفا کدها رو در تگ sql بنویسید احتمالا شما این کد رو کپی و پست کردید که این طور نمایش داده میشن لطفا درستش کنید