PDA

View Full Version : خالی شدن متغیرها پس از پایان کرسر (تنها متغیرهای که داخل کرسر مقدار دهی میشن)



meysam_212
شنبه 05 اردیبهشت 1394, 15:19 عصر
سلام

یه دیتابیس که با پروتکل TCP وصل شدم بهش دارای یه SP هست که از طریق تریگر فراخوانی میشه، حالا داخل این SP یه کرسر وجود داره برای فیلد column_name از جدول sys.columns.
این SP اسم جدولی رو بعنوان ورودی میگیره و نام فیلدهای اون رو از طریق این کرسر داخل یه متغییر ذخیره می کنه. حالا مشکلی که وجود داره اینه که این متغییر که نام فیلدهارو ذخیره می کنه به محض پایان کرسر NULL میشه. تست کردم و داخل خود کرسر مشکلی وجود نداره و NULL نیست، یعنی به طور معمول نباید NULL باشه، خودم فکر می کنم که تنظیماتی برای کرسر وجود داره تا این اتفاق نیفته.
این SP از داخل تریگری که برای حذف هست صدا زده میشه (For DELETED) و بر روی چند جدول من وجود داره.
نکته ای که هست اینه که وقتی از یه جدول رکوردی حذف بشه مشکلی وجود نداره ولی اگه از جدولی یه رکورد حذف بشه که این جدول کلید اصلی جدول دیگه ای باشه که بصورت کسکید بخواد از جدول FK خود رکوردی حذف کنه که در این حالت SP مورد نظر دوبار فراخوانی میشه در صورتی که وقتی جدول FK این SP رو صدا میزنه مشکلی نیست ولی وقتی که جدول PK این SP رو صدا میزنه این متغییر پس از اتمام کرسر NULL میشه
این متغییر رو قبل از اینکه کرسر رو Close و Dealocate کنم هم تست کردم و لی بازهم NULL بود و فقط داخل خود کرسر متغییر مقدار داره و به محض اینکه @@Fetch_Status برابر صفر میشه و از حلقه خارج میشه متغییر NULL میشه.
مطمئنم که این متغیر با هیچ مقدار نالی جمع نمیشه، حتی یه متغییر بعنوان شمارنده تو این کرسر وجود داره که با هر بار اجرای حلقه یکی اضافه میشه ولی بعد از اتمام کرسر این متغیر شمارنده هم Null میشه

نکته ی دیگه ای که هست اینه که همین روند رو روی سیستم خودم که Local هست و برای توسعه دیتابیس استفاده میشه و با همان دیتابیس تست میکنم و مشکلی نیست و تنها روی سرور این مشکل بوجود میاد و اینکه این روند رو مستقیم از روی سیستم سرور هم تست کردم ولی بازهم این مشکل وجود داشت

ورژن اس کیو ال 2012 و سیستم عامل سرور، ویندوز سرور 2012 هست

دستتون درد نکنه