View Full Version : مشکل با Script
حمیدرضاصادقیان
چهارشنبه 28 آذر 1386, 16:00 عصر
سلام دوستان.من در یک Script کد زیر رو نوشتم ولی دائم پیغام میده که فیلد مورد نظرت وجود نداره.دقیقا عین همین دستور رو بالاتر برای یک جدول دیگه نوشتم و اونهم فیلدها مربوطه وجود نداره ولی درست کار میکنه و فیلدها رو ایجاد میکنه.
If Not Exists(select syscolumns.name from syscolumns inner join sysobjects on syscolumns.id=sysobjects.id where
sysobjects.name='u_secret' and syscolumns.name='fpno')
Begin
alter table u_secret
add [fpNo] [SmallInt] NULL
alter table u_secret
Add [FpSharh] [Bit] NULL
ALTER TABLE [dbo].[u_secret] ADD
CONSTRAINT [DF_U_secret_FpNo] DEFAULT (-1) FOR [Fpno],
CONSTRAINT [DF_U_Secret_FpSharh] DEFAULT (-1) FOR [FpSharh]
Update u_secret set FpNo=-1,FpSharh=-1
End
Go
mehdia86
پنج شنبه 29 آذر 1386, 12:55 عصر
با سلام
اول از همه بگم که من دلیل منطقی برا این روش تو SQL ندارم ولی خوب جواب می ده
دستور شما کاملا درسته ولی اگر فیلدی رو اولین بار به یک جدول اضافه کنید بلافاصله قابل بروزرسانی نیست یعنی اگر الان خط مربوط به Update رو بر داری و اجرا کنی فیلدها اضافه می شه و بعد می تونی دستور Update رو اجرا کنی ولی نکته جالبترش اینجاست حالا اگر بری این دو تا فیلدی که اضافه کردی رو حذف کنی و از دوباره کل دستور رو یعنی همراه با Update اجرا کنی این دفعه عمل می کنه البته من بی تقصیرم
موفق باشید
JAFO_IRAN
پنج شنبه 29 آذر 1386, 13:17 عصر
سلام
1. افزودن فیلدها و update در یک بچ انجام شده (بین افزودن فیلد و update دستور GO نیست و با توجه به منطق کد قاعدتا نمیشه اونجا GO گذاشت) این میتونه باعث شه که پارسر که دستورات را قبل از اجرا چک هم میکنه اشکال بگیره - دلیل اینکه در مثال mehdi خطا نمیگیره هم میتونه همین باشه (از دید پارسر فیلدهای حذف شده هنوز هستند).
2. اما وقتی یک فیلد جدید با default تعریف میکنید، عملا مقدار اون فیلد در تمام رکوردهای موجود تعیین میشه و دیگه اصولا نیازی به update نخواهید داشت. پس به صورت یک نکته جنبی، حتی میشه که اون update هم وجود نداشته باشد...
ارادت
حمیدرضاصادقیان
پنج شنبه 29 آذر 1386, 23:53 عصر
ممنون.خوب درسته که من Default تعریف میکنم ولی میخوام در این فیلدها مقدار null نباشه.به همین خاطر اونو دارم update میکنم.ولی جالب اینه که در داخل این Script که نوشتم سه یا چهار مورد به همین صورت فیلد اضافه کردم و بلافاصله این دستور رو اجرا کردم و مشکلی نداشتم.حالا سر این یکی وقتی اجرا میشه ایراد میگیره.
Ali Mahabadi
جمعه 30 آذر 1386, 20:01 عصر
من فکر می کنم استفاده از GO بین هر یک از دستورات مشکلت رو حل کنه چون شما در یک قسمت alter , از update هم استفاده کردی
حمیدرضاصادقیان
شنبه 01 دی 1386, 07:35 صبح
ممنون.ولی شما در داخل یک batch نمیتونی از go استفاده کنی بهت خطا میده
JAFO_IRAN
شنبه 01 دی 1386, 09:27 صبح
خوب درسته که من Default تعریف میکنم ولی میخوام در این فیلدها مقدار null نباشه.به همین خاطر اونو دارم update میکنم.
سلام
نکته همینجاست دیگه، وقتی برای یک فیلد جدید default تعریف کنی اون مقدار در تمام رکوردهای موجود درج میشه و نیازی به update نیست.
بعدا اضافه کردم: باز هم عذرخواهی... مثل اینکه قراره من هر پستی که برای شما مینویسم یک اشتباه توش باشه: اون چیزی که من گفتم فقط وقتی که فیلد Nullable نباشه اتفاق میافته...
ارادت
حمیدرضاصادقیان
شنبه 01 دی 1386, 10:03 صبح
شما میتونی همین رو تست کنی.من تست کردم یک همچین اتفاقی نیافتاد.البته این مشکل حل شد.
من بعد از اینکه فیل رو به جدول اضافه کردم با یک شرط مقدار Null را در اون فیلد تست کردم و اگر null بود مقدار آنرا بروز رسانی میکنم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.