PDA

View Full Version : چگونگی مشخص کردن نوع عملیات حذف و بهنگام سازی



setarehman
دوشنبه 29 مرداد 1386, 07:27 صبح
چطور میشه در sql2000 با دستورات DDL نوع عملیات حذف و update رو مشخص کرد
کدوم نوع ها(cascade,restricted,no action,set null,set defalt) رو با دستور میشه معرفی کرد و بقیه روش ها رو چطور باید برای دیتا بیس معرفی کرد
ارتباط جداول هم با کلید خارجی هست

Hamid.Kad
دوشنبه 29 مرداد 1386, 09:37 صبح
دستور Create Table و Alter Table رو توی Books Online ببینید، توضیح داده

setarehman
دوشنبه 29 مرداد 1386, 10:18 صبح
این طور که من فهمیدم تو sql2000 فقط دو روش cascade,no action رو میشه با دستور هنگام ایجاد جدول تعریف کرد
بقیه گزینه ها رو چطور میشه برای یه جدول تعریف کرد؟

AminSobati
دوشنبه 29 مرداد 1386, 11:21 صبح
دوست عزیزم،
ایجاد Referential Integrity دو راه کلاسیک داره:
1) Declarative
2) Procedural

در روش اول شما از قابلیتهای خود FK استفاده میکنین. FK در SQL Server 2000 فقط NO ACTION و CASCADE رو پشتیبانی میکنه.
در روش دوم شما Trigger مینویسین. در SQL Server 2000 شما اگر قابلیتهای دیگه ای نیاز دارین، باید Trigger بنویسین. در SQL Server 2005 عملیاتی مثل SET NULL و SET DEFAULT توسط FK پشتیبانی میشن و نیازی به Trigger نیست

setarehman
دوشنبه 29 مرداد 1386, 11:51 صبح
ممنونم
میشه یه مثال بزنید برام با trigger

setarehman
چهارشنبه 31 مرداد 1386, 12:11 عصر
من یه نمونه کد از یه تریگر میخوام که توش نوع عملیات رو هم مشخص کرده باشه

Kamyar.Kimiyabeigi
چهارشنبه 31 مرداد 1386, 13:10 عصر
CREATE TRIGGER trig1
on authors
FOR INSERT, UPDATE, DELETE
AS
SELECT a.au_lname, a.au_fname, x.info
FROM authors a INNER JOIN does_not_exist x
ON a.au_id = x.au_id
GO

setarehman
پنج شنبه 01 شهریور 1386, 07:44 صبح
ممنونم
حالا اگه بخوام مثلا نوع عملیات حذف رو set null بذارم دقیقا چطور باید بنویسمش

Kamyar.Kimiyabeigi
شنبه 03 شهریور 1386, 07:51 صبح
اگر فرضا" شما یک trigger برای جدول trig_example نوشته باشین با نام trig1 با دستور زیر میتونین غیر فعال کنین

ALTER TABLE trig_example DISABLE TRIGGER trig1
GO


کد زیر هم برای فعال کردن Trigger استفاده میشه

ALTER TABLE trig_example ENABLE TRIGGER trig1
GO


کد زیر هم برای حذف کامل trigger

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'employee_insupd' AND type = 'TR')
DROP TRIGGER employee_insupd
GO