PDA

View Full Version : سوال: جلوگيري از ورود داده تكراري



soheil3242
چهارشنبه 02 مرداد 1387, 20:49 عصر
سلام يه سوال ديگه داشتم
فرض كنيم تو sql يه جدول داريم كه داراي فيلد است كد شهر و نام شهر . كد شهر را از نوع int , identity تعريف ميكنيم و نام شهر نيز از نوع nvarchar . ثبت اطلاعات در اين جدول تنها از طريق وارد كردن نام شهر ها توسط كاربر مربوطه است و فيلد كد نيز خودكار يكي يكي اضافه ميشود . قاعدتا با داشتن فيلد Pk نبايد اطلاعات تكراري وارد شود يعني دو سطر مختلف با كد هاي مختلف حاوي نام شهر هاي يكسان باشد اما sql اجازه ميدهد تا اطلاعات تكراري وارد شود من حتي روي فيلد نام شهر نيز يك unique constraint گذاشتم تا شايد هنگام درج اطلاعات از ورود اطلاعات تكراري جلوگيري كند ولي بعد از تاييد اطلاعات جدول نام شهر هاي تكراري با كد هاي متفاوت درج شده است براي رفع اين مشكل بايد چه كاري انجام داد ؟:متفکر:

mjdeveloper
پنج شنبه 03 مرداد 1387, 03:22 صبح
یه Trigger insert روی جدول بنویس که داده تکراری رو به محض ورود پاک کنه

خوبی این کار اینه که چه از توی برنامه و چه از توی Sql نمی تونی دیگه داده تکراری وارد کنی

CREATE TRIGGER test_tr ON [dbo].[Table1]
FOR INSERT
AS

declare @CityName nvarchar(50)
declare @ID int
Declare @Count int

select @ID=id,@CityName = CityName From inserted

Select @Count=Count(CityName) From Table1 where cityName=@CityName
group by CityName

if @Count>1
delete From Table1 where id=@ID

mjdeveloper
پنج شنبه 03 مرداد 1387, 03:26 صبح
امیدوارم با تریگرها آشنا باشی من نمی دونم اگه آشنا هستی بقیه رو نخون و منو ببخش.

برای نوشتن تریگر روی جدول راست کلیک کن و All Task>Manage Trigger رو بازکن و اینجا بنویس.
خوبی تریگر هم اینه که لازم نیست شما اجراش کنی خودش بعد از عملی که شما براش تعریف می کنی اجرا می شه.

SYNDROME
پنج شنبه 03 مرداد 1387, 06:30 صبح
دوست عزیز باید نام شهر را تنهایی فیلد کلید بگیرید.
موفق باشید

رضا جاسبی
جمعه 11 مرداد 1387, 04:46 صبح
دوست عزیز شما unique رو بر روی ID و نام با هم زدی. در فرم Design table باید از منو Manage Index/Keys رو انتخاب کنی بعد در Index Tab بری و New رو بزنی یک اسم سیستمی بهت میده و می خواد ایندکس بسازه. اول Create Unique رو می زنی و بعد در لیستی که داری با انتخاب از Combo باید id رو به name تبدیل کنی و توجه کن که فقط یک سطر name انتخاب بشه.
بر خلاف نظردوست عزیزمون Syndrom میگم که ID رو کلید بگیر و نام شهر رو Unique کن. هر چند که نام شهر واقعا ماهیت Unique نداره. اگر برید در هواشناسی یاهو و مثلا مسکو رو به عنوان نام شهر بزنید می بینید که هفت هشت تا مسکو براتون ردیف می کنه. چه برسه به شهرهای کوچک در ایران مثل حسن آباد و علی آباد