PDA

View Full Version : Null & Unique



پرواز
چهارشنبه 28 آذر 1386, 14:31 عصر
با سلام،

یه فیلد دارم که نوعش nvarchar هست. من می خوام کاری کنم که این فیلد زمانی که مقدار داره غیر تکراری باشه. یعنی بشه به تعداد نامحدود NULL توش وارد کرد. ولی مقادیر غیر از مقدار NULL، غیر تکراری باشن.

میشه؟ یا راه حل دیگه ای داره؟

JAFO_IRAN
چهارشنبه 28 آذر 1386, 16:10 عصر
سلام

فکر کنم باید برای جدول تریگر بنویسی. به ازای رکوردهای insert یا update شده سایر رکوردهایی که همون مقدار را در فیلد دارند تشخیص بدی و ...

فرض: tbl_Data با فیلدهای fld_Key و fld_Name که فیلد آخر قراره nullable و unique باشه:



CREATE TRIGGER [insupd_tbl_Data] ON dbo.tbl_Data
FOR INSERT, UPDATE
AS

if Exists(
select i.fld_Key
from inserted i
inner join tbl_Data t on i.fld_Name = t.fld_Name
where i.fld_Key <> t.fld_Kay)
begin
RaisError('Repeated Name!', 16, 1)
Rollback Transaction
return
end


ارادت

پرواز
چهارشنبه 28 آذر 1386, 21:30 عصر
همین کارو نمیشه تو یه Constraint انجام داد؟

JAFO_IRAN
پنج شنبه 29 آذر 1386, 10:08 صبح
سلام

فکر نکنم بشه، چون به هر حال داستان شما با تعریف UNIQUE نمی‌خونه... اما به هر حال مطمئن هم نیستم. شاید اساتید راه ساده تری پیشنهاد کنند.

ارادت

ali_abbasi22145
شنبه 01 دی 1386, 15:30 عصر
سلام
جالب است که Access فکستنی این را به شکل Internaly پشتیبانی می کند.
آیا در SQL ورژنهای 2005و 2008 پشتیبانی شده است؟ اگر نشده به مایکروسفت پیشنهاد اضافه کردنش را بدهیم.

پرواز
شنبه 01 دی 1386, 21:59 عصر
کجای Access این موضوع رو میشه پیاده کرد؟

رضا عربلو
شنبه 01 دی 1386, 22:31 عصر
این سناریوی که بیان کردید بایستی جالب باشد.
می تونم اسم اون تیبل تون را بدونم؟
و یا این که چه اطلاعاتی در اون تیبل ذخیره می شود؟

پرواز
دوشنبه 03 دی 1386, 03:44 صبح
اسم جدول: tblOperations
فیلدی که وصفش رو گفتم یه فیلدیه که اطلاعات یک عملیات مالی رو ذخیره می کنه و میگه این مربوط به بدهکاری از یک فروشه یا نه. اگه بدهکاری فروش باشه آیدی فروش رو ذخیره می کنه ولی این آیدی فروش نباید تکرار بشه. اگه نباشه هم NULL رد میشه.

رضا عربلو
سه شنبه 04 دی 1386, 17:44 عصر
من نمی دانم چرا شما به همچین طرحی رسیده اید ولی به نظر من با طراحی درست و دقیق نرم افزار شما می توانید بسیاری از business rule ها تون را در سطح دیتابیس با کمک relation ها و ... به سادگی برقرا کنید.
علی ایحال برای مورد بالا شما می توانید از یک جدول دیگر با دو فیلد tblOperations.ID و ای دی تیبل دومتون برای درج اطلعات مالی مربوط به عملیات فروش استفاده کنید و به راحتی می توانید contrait تون را در اون پیاده کنید.