ورود

View Full Version : این error یعنی چی



setarehman
شنبه 21 آذر 1383, 08:44 صبح
سلام
من میخوام اطلاعات یه بانک اطلاعاتی رو از تو خود sql عوض کنم اما نمیدونم چرا به من این اجازه رو نمیده و این error رو میده
transaction cannat start while in firehose mode
البته از طریق query میتونم اطلاعات رو update کنم و هیچ پیغامی نمیده

AminSobati
شنبه 21 آذر 1383, 19:35 عصر
دوست عزیزم زمانیکه شما جدول رو در Enterprise Manager باز میکنین، گاها SQL Server از حالتی به نام Firehose برای نمایش رکوردها استفاده میکنه که در این وضعیت، ارتباطی بین رکوردهای در حال نمایش با رکوردهای واقعی در جدول وجود نداره و اگر ویرایشی صورت بگیره، SQL Server نمیدونه این رکورد به کدوم رکورد در جدول لینک هست لذا Update منتقل نمیشه.
کلا Enterprise Manager محیط مناسبی برای ویرایش اطلاعات نیست.
البته سوالی که من ازتون دارم اینه که آیا جدول شما در موقع بروز این خطا، دارای PK بوده؟

setarehman
یک شنبه 22 آذر 1383, 07:01 صبح
نه جدول بدون primry key هم هست یعنی اون جدولی که من میخوام اطلاعاتش رو تغییر بدم pk نداره اما بعضی دیگه از جدول ها دارن

AminSobati
یک شنبه 22 آذر 1383, 21:36 عصر
روی جدولهایی هم که PK دارین یقینا این پیغام رو گرفتین؟

setarehman
دوشنبه 23 آذر 1383, 08:06 صبح
فرقی نداره چه داشته باشه چه نداشته باشه بازم همین پیغام رو میده

AminSobati
دوشنبه 23 آذر 1383, 18:56 عصر
همینطوره دوست عزیزم،
در حالت Firehose اطلاعات قابل ویرایش نیستند و کلا EM محیط مناسبی برای این کار نیست. ویرایش باید از طریق دستورات DML انجام بشه

setarehman
سه شنبه 24 آذر 1383, 09:05 صبح
اما من اطلاعات یه بانک دیگه رو تونستم تغییر بدم ولی از این یکی ایراد میگره

faramarz_s
سه شنبه 24 آذر 1383, 12:14 عصر
حالتی به نام Firehose
این حالت چه مواقعی پیش می آید و راه تشخیص آن چیست؟ :sunglass:

AminSobati
پنج شنبه 26 آذر 1383, 21:03 عصر
اما من اطلاعات یه بانک دیگه رو تونستم تغییر بدم ولی از این یکی ایراد میگره
دوست عزیزم،
اگر ویرایش شما در EM بیشتر از یک رکورد رو بتونه تحت تاثیر قرار بده، یا به عبارت دیگه اگر فیلد یونیک نداشته باشین و دو تا رکورد دقیقا مثل هم باشن، عمل ویرایش متوقف میشه. چون SQL Server باید ویرایش شما رو به دستور UPDATE تبدیل کنه. اگر رکورد شما یونیک نباشه، پس عمل Update بیش از یک رکورد رو تحت تاثیر قرار میده در حالیکه شما قصد ندارین رکورد دیگه ای تغییر کنه، لذا عمل ویرایش Rollback میشه.
به عنوان مثال این کارها رو در QA انجام بدین:

create table UpdTest(
c1 int,
c2 int)

insert UpdTest values(1,1)
insert UpdTest values(1,2)
حالا در EM جدول رو باز کنین. عدد 2 رو به 1 تغییر بدین. این ویرایش بدون اشکال انجام میشه. اما از این لحظه به بعد هیچ مقداری رو نمیتونین تغییر بدین. چون دو رکورد مثل هم هستند و برای Update نمیشه تنها به یکی از اونها اشاره کرد. امتحانش هم به این صورته که خودتون سعی کنین یک دستور Update بنویسین که ویرایش انجام بشه. میبینین که نمیشه بین این دو رکورد فرق گذاشت تا فقط یکی از اونها Update بشه.
اما با اجرای این دستور:


alter table UpdTest
add c3 int identity(1,1)
یک فیلد یونیک اضافه میشه و ویرایش امکان پذیر خواهد بود..


این حالت چه مواقعی پیش می آید و راه تشخیص آن چیست؟
دوست عزیزم، اینکه SQL Server چه موقع از Firehose استفاده میکنه، توسط ما تعیین نمیشه و قابل تشخیص نیست(در حقیقت نیازی هم نداریم)
تنها برای ویرایش لازمه تا همونطور که توضیح داده شد، یک فیلد یونیک اضافه کنین تا در EM کارتون انجام بشه.

موفق باشین