PDA

View Full Version : اعمال نشدن truncate برای جداول رابطه ای



bahareee
سه شنبه 14 اسفند 1386, 08:55 صبح
من 2 table دارم که با هم relation دارن دستور truncate برای tableی که شامل fk هست اعمال میشه ولی برای tableی که شامل pk هست اعمال نمیشه..
چطور میتونم این مشکلو حل کنم؟

bahareee
سه شنبه 14 اسفند 1386, 15:53 عصر
چرا کسی به من کمک نمیکنه؟؟!!

bahareee
سه شنبه 14 اسفند 1386, 20:30 عصر
یعنی هیچی؟؟؟؟؟؟؟!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!

nasseritemp
سه شنبه 14 اسفند 1386, 20:49 عصر
احتمالا توی Table دیگه ای که با هم Ralation دارند رکورد وابسته وجود داره.

Kamyar.Kimiyabeigi
چهارشنبه 15 اسفند 1386, 09:21 صبح
ظاهرا" برای جداولی که در Relation ها حکم مرجع و یا Master رو دارن دستور Truncate اعمال نمیشه.

Elham_gh
چهارشنبه 15 اسفند 1386, 10:00 صبح
دستور TRUNCATE روی 3 دسته از جداول اعمال نمی شود:
1- جداولی که با استفاده از FOREIGN KEY به آنها رجوع شده.
2- جداولی که از آنها درindexed view استفاده شده.
3- جداولی که اطلاعاتشان درmerge replication یا transactional replication ، توزیع می شود(Published می شود)

مورد شما هم شامل دسته اول می شود.

AminSobati
چهارشنبه 15 اسفند 1386, 11:44 صبح
از جدول Child شروع کنین تا بالا

Elham_gh
چهارشنبه 15 اسفند 1386, 15:58 عصر
از جدول Child شروع کنین تا بالا

TRUNCATE کردن جدول Child کمکی نمی کند. تنها راه حل حذف ارتباط جدول Master و Detail است.

bahareee
پنج شنبه 16 اسفند 1386, 12:09 عصر
TRUNCATE کردن جدول Child کمکی نمی کند. تنها راه حل حذف ارتباط جدول Master و Detail است.


من هم با شما موافقم
خوب حالا چطور میشه ارتباط بین table ها رو حذف کرد؟ البته با کد...

AminSobati
پنج شنبه 16 اسفند 1386, 23:31 عصر
من از آدرس http://www.sqlservercentral.com/scripts/Index+Management/31285/ کد زیر رو براتون Paste میکنم، آزمایش کنید... ممکنه نیاز به دستکاری داشته باشه:



SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE Procedure Drop_Foreign_Keys
AS
/* Create a variable to hold dynamic SQL statement */
declare @Select_SQL as nvarchar(500)

/* Drop Foreign Key table if exists - this is temporary */
if exists (select * from sysobjects where id = object_id('Foreign_Key_Table') and sysstat & 0xf = 3)
drop table Foreign_Key_Table

/* Get foreign key info for one table */
select top 1
object_name(fkeyid) as foreign_key_table,
object_name(rkeyid) as primary_key_table,
object_name(constid) as [name]
Into Foreign_Key_Table
from sysforeignkeys
where OBJECTPROPERTY(rkeyid, N'IsUserTable') = 1

/* Drop foreign key found and get details on next until all have been dropped */
While (select count(*) from foreign_key_table) > 0
begin
set @Select_SQL = 'alter table '
+ (select foreign_key_table + ' drop ' + name from Foreign_Key_Table)
exec sp_executesql @Select_SQL

truncate table Foreign_Key_Table
Insert into Foreign_Key_Table
select top 1
object_name(fkeyid) as foreign_key_table,
object_name(rkeyid) as primary_key_table,
object_name(constid) as [name]
from sysforeignkeys
where OBJECTPROPERTY(rkeyid, N'IsUserTable') = 1

end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO