PDA

View Full Version : کمک - دستوری که بتواند تمام داده های نال را مقدار دهی کند



arman_Delta2002
دوشنبه 18 اردیبهشت 1391, 20:33 عصر
سلام من دنبال یه دستور هستم که کل فیلد های موجود کل تیبل هام رو اگه مقدارشون نال بود به مقدار '' یا همون خالی مقدار دهی کنه .

اصلا میشه با یه دستور کل رکورد های یک دیتابیسی که شامل چندین تیبل هست رو یجا بروز کرد؟
البته باید در نظر داشت که توی بعضی از تیبل ها انواع داده ها هم هست مثل ایمیج یا بیگ اینت یا ان ورچر یا بیت


کلا حدفم از این کار اینه که من یه بانک اطلاعاتی دارم که توش حدود 30 تا تیبل هست که توی بعضی از این تیبل ها حدود 50 تا فیلد از انواع مختلف هست . من به مرور فیلد هایی رو به بعضی از تیبل ها اضافه کردم و در آینده هم اضافه میشه و این باعث شده که رکورد هایی که قبلا ذخیره کردم و فیلد های جدید رو اضافه کردم مقدار نال قرار بگیره داخل فیلد . میخوام این مشکل رو با یک دستور حل کنم

mohsen.net
دوشنبه 18 اردیبهشت 1391, 21:51 عصر
خوب باید هم NULL بشه . مشکلت با NULL چیه؟
دقت کن که '' با NULL فرق داره ، همچنین بین NULL و 0 برای فیلد های عددی
به نظر من که اصلا این کاری که می کنی صحیح نیست

pashna
سه شنبه 19 اردیبهشت 1391, 04:36 صبح
سلام، من ۲ تا راه میشناسم، ۱کی‌ اینکه لیست طبل هأی رو که فیلد نال دارن رو دربیرید بعد با این دستور میتونید آپدیتش کنید


ALTER TABLE 'TableName' ADD CONSTRAINT 'ConstraintName' DEFAULT ('Something') FOR 'FieldName'


حالا اگر توی کرسر باشه ، همرو یکی‌ یکی‌ آپدیت می‌کنه.
اینم یه راه دیگس که لیست فیلد ها‌رو میده، میتونید لیست تو آپدیت کنید


DECLARE crs CURSOR LOCAL FAST_FORWARD
FOR
SELECT name
FROM syscolumns
WHERE id = OBJECT_ID('TableName')
OPEN crs
DECLARE @name SYSNAME
FETCH NEXT FROM crs INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('SELECT ' + @name + ' FROM [catalog].[TBL_Brands] WHERE ' + @name + ' IS NULL')
FETCH NEXT FROM crs INTO @name
END
CLOSE crs
DEALLOCATE crs
ضمنا توجه داشته باشید که `` و نال ۲ مقدار متفاوت هستند، نال پوچه ولی‌ `` مقدار داره شما نمیتونید بگید ایندو باهم برابر هستند، ممکنه که در ساختار شما اینا بقدیر یکسان برگردونن ولی‌ ماهیتشون باهم فرق داره و این برای ۰ و نال هم صادق است.

crazy coder
سه شنبه 19 اردیبهشت 1391, 08:21 صبح
سلام
روز بخیر
1- اینکه این کاری که شما داری انجام میدی ضروری هست یا نه باید بحث بشه...
2- شما میتونه تو خود دیتابیس Null رو حذف کنی با روش هایی که دوستان گفتن
3- شما میتونی بذاری Null باشه ولی تو برنامه وقتی میخای اون null رو نمایش بدی بجاش '' نمایش بدی...کد زیر در دستور select برات اینکار رو انجام میده، یعنی null ها رو بجاش '' نشون میده...
SET CONCAT_NULL_YIELDS_NULL OFF;
SELECT EmpMeliNum+ '(' + EmpName+EmpFamily + ')' AS Name, EmpMeliNum, Emp_id FROM dbo.Emp
ORDER BY EmpMeliNum ASC

تو مثال بالا فیلد EmpName در بعضی رکورد ها دارای مقدار Null بود، لذا موجب میشد که اون رکورد کلا نشون داده نشه، چون null+string میشد Null...اما دستور بالا این null رو درست میکنه یعنی به شکل '' نشونش میده...
امیدوارم کمکت کرده باشه...

arman_Delta2002
سه شنبه 19 اردیبهشت 1391, 10:36 صبح
بله ضروری هست چون من برنامه نویس VB.Net هستم و اگر زمان آپدیت فیلد های جدید که پیشبینی نمیشه مقدار دارن یا Null هستن به مشکل می خورد برنامه.