PDA

View Full Version : دو سوال در مورد دستور Insert ...



احد
پنج شنبه 02 مهر 1383, 09:57 صبح
سلام
دوستان خسته نباشید

1) چگونه میتوان همزمان با یک Query به دو جدول با دستور Insert اطلاعات وارد
کرد ؟

2) چگونه میتوان با یک Query یک رکورد به یک جدول اضافه کرد بطوری که رکورد تکراری درج نشود مثلا :
Insert Into TableName (FieldList) Values (ValuesList) Where FieldKey not in (Select FieldKey From TableName)

البته من Query بالا را پیاده سازی کردم اما Sql Server خطا میده . :o

قبلا از همکاریتان کمال تشکر را دارم :)

JavanSoft
پنج شنبه 02 مهر 1383, 13:03 عصر
1) نمی توان انجام داد
2)‌ قبل از این دستور باید وجود رکورد را چک کنید . در واقع دستور Where ... Select باید قبل از Insert اجرا شود

AminSobati
پنج شنبه 02 مهر 1383, 15:35 عصر
دوست عزیزم،
برای جلوگیری از ورود مقدار تکراری، چرا از Unique Constraint استفاده نمیکنید تا خود SQL Server جلوی ورود اونرو بگیره؟

احد
جمعه 03 مهر 1383, 07:43 صبح
سلام

ممنون از راهنمایی شما

دوست گرامی ما فیلد کلیدی را Unique Constraint قرار دادیم اما نمیخواهیم که در چنین مواقع پیغام Sqlserver را به کاربر نشان دهیم . باید قبل از اینکه تو سرور یک خطا پیش بیاد باید وجود رکورد تکراری را بدانیم .

باز از راهنمایی شما کمال تشکر را دارم . :)

احد
جمعه 03 مهر 1383, 07:46 صبح
سلام
در صورت امکان به سوال اول هم یک راه حلی پیشنهاد کنید :o

AminSobati
جمعه 03 مهر 1383, 18:44 عصر
دوست عزیزم،
من دقیقا نمیدونم به چه صورت این اطلاعات وارد جدول میشن. مثلا آیا بعد از عمل Insert، کاربر باید در جریان موفقیت یا عدم موفقیتش قرار بگیره؟ یا اینکه عمل Insert یکی از کارهای Background شماست و به یوزر کاری نداره. ولی علت اینکه من استفاده از Unique Constraint رو پیشنهاد کردم این بود که اگر شما به طور دستی وجود Value رو بخواید کنترل کنید، در حقیقت یک Query اضافی داره انجام میشه. ولی
Unique Constraint این عمل اضافی رو نداره.
ضمنا خطایی که در اثر مغایرت Insert با Unique Constraint ایجاد میشه، در هر زبان برنامه نویسی قابل کنترله و الزاما نباید به یوزر نمایش داده بشه.
ولی به هر حال باز اگر صلاح در اینه که دستی کنترل کنین، این کار امکان پذیره:



IF NOT EXISTS
(SELECT FieldKey FROM TableName WHERE FieldKey=FieldValue)

INSERT TableName(FieldList) VALUES(ValuesList)


در مورد سوال اول، راه استانداردی وجود نداره ولی شما میتونین روی جدول اولی یک Trigger بنویسید که موقع Insert، مقادیر رو به جدول دوم هم وارد کنه. به این شکل شما Insert رو روی یک جدول انجام میدین، ولی در دو جدول وارد میشه.
موفق باشین

احد
سه شنبه 07 مهر 1383, 08:45 صبح
خسته نباشی دوست عزیز

پاسخ شما کاملا درسته . اما اطلاعاتی که ما در دو جدول وارد میکنیم یکی نیستند
(امکان داره فقط در یک یا دو فیلد مشترک باشند) پس نمیتوانیم با Trigger این امر رو پیاده سازی کنیم .

باز ممنون از لطف شما :o

AminSobati
سه شنبه 07 مهر 1383, 10:42 صبح
دوست عزیز،
زمانیکه دو جدول شما اینقدر با هم متفاوت هستن، چطور انتظار دارین SQL Server بتونه با یک دستور Insert به 2 جدول کاملا متفاوت مقادیر رو وارد کنه :?:
تصور من این بود که دو جدول شما کاملا ساختار یکسان دارند که این سوال رو میپرسید!