PDA

View Full Version : چک کردن عدم تکراری بودن رکورد، قبل از ثبت(در دستور درج گروهی)



Nima_kyan
یک شنبه 06 اسفند 1391, 12:14 عصر
سلام
من یه دستورت درج گروهی دارم که قبل ثبت با یه محاسبات خاصی یه سری رکورد رو از جدول های مختلف میکشه بیرون و تو یه جدول مجازی (Result#) میریزه و حالا میخوام محتویات این جدول مجازی رو رکورد به رکورد تو یه جدول دیگه درج کنم(در صورتی که این رکوردها تکراری نباشن ثبت بشن)از همچین دستوری استفاده کردم:

insert into Table1 (field1,field2,field3)
select field1,field2,field3 from #Result
که کار درج رو بدون مشکل انجام میده ولی میخوام قبل درج هر رکورد تست کنم در صورت تکراری نبودنش درج بشه. ولی چطور نمیدونم؟؟؟؟؟(فرض کنیم که فیلد کلید Field1 باشه)
ممنون میشم کمک کنید

hossein_h62
یک شنبه 06 اسفند 1391, 13:02 عصر
سلام
insert into Table1 (field1,field2,field3)
select field1,field2,field3 from #Result
Where field1 Not IN (Select filed1 From Table1)

Nima_kyan
یک شنبه 06 اسفند 1391, 13:54 عصر
ممنون.
و اگه کلیدمون ترکیبی باشه چطور؟
مثلا فیلدهای Field1 و Field2

hossein_h62
یک شنبه 06 اسفند 1391, 15:37 عصر
ممنون.
و اگه کلیدمون ترکیبی باشه چطور؟
مثلا فیلدهای Field1 و Field2
... AND ...

samani
یک شنبه 06 اسفند 1391, 15:48 عصر
ممنون.
و اگه کلیدمون ترکیبی باشه چطور؟
مثلا فیلدهای Field1 و Field2

INSERT INTO Table1 (field1,field2,field3)
SELECT field1,field2,field3 FROM #Result
WHERE CAST(field1 AS VARCHAR(50)) + '_' + CAST(field2 AS VARCHAR(50)) NOT IN (SELECT CAST(field1 AS VARCHAR(50)) + '_' + CAST(field2 AS VARCHAR(50)) FROM Table1)

محمد سلیم آبادی
سه شنبه 08 اسفند 1391, 15:44 عصر
نکته
در برابر یک سیستم مدیریت بانک اطلاعاتی رابطه ای چون SQL Server جایز نیست که از اصطلاح فیلد به جای ستون و رکورد به جای سطر استفاده کنید به این پست مراجعه کنید:
http://puresql.blogsky.com/1391/12/05/post-1/

راه حل با در نظر گرفتن کلید ترکیبی:
insert into Table1(column1, column2, column3)
select column1, column2, column3
from #result t
where not exists
(select *
from Table1
where column1 = t.column1
and column2 = t.column2);