PDA

View Full Version : مشکل با دستور INSERT INTO



MMeshkat
چهارشنبه 24 تیر 1388, 00:31 صبح
برای اینکه بتونم سؤالمو بپرسم باید کمی درباره ی کاری که می خوام انجام بدم توضیح بدم.
تصور کن من 2 تا جدول دارم(Table1 و Table2) جدول اول 3 تا ستون دارد به ترتیب از چپ به راست A و B و C و جدول دوم هم دارای 3 ستون به ترتیب از چپ به راست A و B وDate حالا با اجرای برنامه و با دستور زیر دو ستون جدول دوم را با دو ستون جدول اول پر می کنم:




commantStr = "INSERT INTO Table2(A,B) SELECT A,B FROM Table2 WHERE C like Mostafa";

حالا برنامه من یک مقدار را از کاربر می گیره(مثلا متغیر Var1) و این مقدار باید در ستون C جدول و جایی که ستون های A وB من که مقدار دارند ذخیره بشه با کمک این دستور:




commantStr = "INSERT INTO Table2(C)VALUES(@Var1)WHERE A<> null AND B <> null";

اما نه تنها وارد نمیشه بلکه خطا هم می گیره!
وقتی قسمت بعد از where را حذف می کنم مقدار متغیر Var2 را در ستون C درج می کنه اما نه در قسمت هایی که مقدار دو ستون A و B درج شده بلکه در قسمت های جدید درج می کنه

حالا سؤالم اینه که چه مشکلی در کد من وجود داره و چطور میشه (اگه می شه کد) این کار رو کرد؟

arman_Delta2002
چهارشنبه 24 تیر 1388, 02:08 صبح
برای این در قسمت جدید درج میشه که شما از دستور INSERT INTO استفاده کردین شاید این مثال بدردتون بخوره


INSERT INTO MESSAGE_TEMP (id, title, body)
SELECT mid, title, body
FROM MESSAGE1
WHERE creatorId='u001';

mn_zandy63
چهارشنبه 24 تیر 1388, 02:10 صبح
من که نفهمیدم دقیقاً چیکار میخوای بکنی، ولی یه چیز واضحه، وقتی میخوای یه سری اطلاعات رو که قبلاً وارد کردی، تغییر بدی، (میخوای ستون C رو در رکورد هایی که با دستور قبلیش Insert کردی مقدار بدی دیگه) از دستور Insert نباید استفاده کنی، از دستور Update استفاده کن.
یه تست کن، درست میشه :چشمک:
اون دستوری که نوشتی خطا میده و میگه که نمیتونی where داشته باشی اینجا. خب حق داره بیچاره :چشمک:

mn_zandy63
چهارشنبه 24 تیر 1388, 02:28 صبح
خب من فکر میکنم متوجه شدم مشکلت چیه. ببین
تابع Insert Into اگه From داشته باشه، معنیش اینه که میخواهی یک سری اطلاعات از یک جدول دیگه مثل Table1 بخونی بریزی داخل مثلاً جدول Table2، در اون صورت میتونی از where استفاده کنی که مشخص کنی کدوم رکورد ها از Table1باید انتخاب شن و ریخته شن داخل Table2. مثل دستور اولت.
ولی اینجور که در دستور دوم نوشتی، کاربردش وقتی هست که میخواهی یک سری رکورد جدید بسازی با یک سری مقادیر جدید. در این حالت دیگه where معنی نداره.
مشکل تو احتمالاً اینه که، میخواهی رکوردهایی رو که قبلاً با دستور اول داخل Table2 ریختی ویرایش کنی و فیلد C رو مقدار دهی کنی، در این حالت باید از دستور Update استفاده کنی.
یک مورد دیگه هم هست، ایراد دیگه ای که دستورت داره اینه که وقتی میخوای با NULL مقایسه کنی نباید بنویسی A <> NULL بلکه باید بنویسی A IS NOT NULL.
پس دستور دومت رو باید این شکلی بنویسی:


UPDATE Table2 SET C = @var WHERE (A IS NOT NULL) AND (B IS NOT NULL)