PDA

View Full Version : جمع دوستون باهم که یکی از آنها null است



Iran58
سه شنبه 21 بهمن 1393, 15:00 عصر
سلام
می خواهم دوتا ستون را باهم جمع کنم (هر دو از نوع varcharهستند)
اما هر گاه یکی از ستونها null باشد جواب جمع هم nullنمایش داده می شود
مانند کدزیر
declare @s nvarchar(10); set @s=null;
declare @d nvarchar(10); set @d='a';
if(@s=null)
set @s=' ';
select @s+@d;


جواب NULLرا نمایش می دهد
اما می خواهم aنمایش داده شود چکار باید کنم
در sql2008r2
باتشکر

sajadsobh
سه شنبه 21 بهمن 1393, 16:08 عصر
فکر کنم این پروسیجر کارتون رو راه میندازه:
CREATE PROC SumOfString
@s NVARCHAR(10),
@d NVARCHAR(10)
AS
BEGIN
IF (@s IS NULL OR @d IS NULL) SELECT 'a'
ELSE SELECT @s+@d
END

lastmory
سه شنبه 21 بهمن 1393, 16:10 عصر
سلام اینو تست کنید :)

CREATE PROC SumOfString
@s NVARCHAR(10),
@d NVARCHAR(10)
AS
BEGIN
IF (@s IS NULL OR @d IS NULL) SELECT 'a'
ELSE SELECT Isnull(@s , '')+ Isnull(@d, '')
END

SabaSabouhi
سه شنبه 21 بهمن 1393, 21:52 عصر
سلام
دوستمون lastmory درست اشاره کرده، باید از ISNULL استفاده کنی، البته اون procedure و اون شرط کلاً اشکال داره.



SELECT ISNULL( @s, '' ) + ISNULL( @d, '' )

به همین راحتی، نیاز به هیچ شرط و procedure ای هم نداره.

صبا صبوحی

ham3d1988
پنج شنبه 23 بهمن 1393, 07:28 صبح
هر متغیر عددی یا رشته ای با یه مقدار NULL جمع بشه نتیجه NULL میشه بنابراین بنابر گفته دوستمون از تابع IsNull برای جایگزینی تک حالتی و یا تابع COALESCE برای جایگزینی چندحالتی استفاده کنید.
مثلاً :
Select coalesce(@s+@d,@s,@d,'')

ham3d1988
پنج شنبه 23 بهمن 1393, 07:30 صبح
هر متغیر عددی یا رشته ای با یه مقدار NULL جمع بشه نتیجه NULL میشه بنابراین بنابر گفته دوستمون از تابع IsNull برای جایگزینی تک حالتی و یا تابع COALESCE برای جایگزینی چندحالتی استفاده کنید.
مثلاً :
Select coalesce(@s+@a,@s,@a,'')

lastmory
پنج شنبه 23 بهمن 1393, 13:59 عصر
سلام
دوستمون lastmory درست اشاره کرده، باید از ISNULL استفاده کنی، البته اون procedure و اون شرط کلاً اشکال داره.



SELECT ISNULL( @s, '' ) + ISNULL( @d, '' )

به همین راحتی، نیاز به هیچ شرط و procedure ای هم نداره.

صبا صبوحی
بله درسته :)

declare @s nvarchar(10); set @s=null;
declare @d nvarchar(10); set @d='a';


select IsNull(@s , '')+IsNull(@d , '');

Iran58
دوشنبه 04 اسفند 1393, 16:03 عصر
سلام
دوستمون lastmory درست اشاره کرده، باید از ISNULL استفاده کنی، البته اون procedure و اون شرط کلاً اشکال داره.



SELECT ISNULL( @s, '' ) + ISNULL( @d, '' )

به همین راحتی، نیاز به هیچ شرط و procedure ای هم نداره.

صبا صبوحی
سلام
میشه بیشتر در مورد اشکال پروسیچر که گفته اید توضیح دهید

golbafan
دوشنبه 04 اسفند 1393, 16:08 عصر
سلام
میشه بیشتر در مورد اشکال پروسیچر که گفته اید توضیح دهید

اشکالش اینه وقتی راه درست تری هست ، نیازی نیست روی دیتابیس هزینه پروسس ایجاد کنیم...

SabaSabouhi
دوشنبه 04 اسفند 1393, 19:52 عصر
سلام
میشه بیشتر در مورد اشکال پروسیچر که گفته اید توضیح دهید

سلام
اول این که دقیقاً حرف دوست عزیزمون golbafan کاملاً درسته
و دیگه این که دوستمون یه SP نوشته و یک شرط گذاشته، و در جایی از ISNULL استفاده کرده که به هیچ عنوان
مقدارها null نخواهند بود.
یه چیزی که من متاسفانه تو کارهای متوسط خیلی زیاد می‌بینم، کدها و scriptهای بی‌اثر و بی‌فایده هستن که
فقط باعث کندی کار، سختی درک موضوع و پشتیبانی می‌شه.
تا جایی که ممکنه سعی کن کدها و scriptها رو کوتاه بنویسی، هم خوانایی بالا می‌ره و هم هزینه‌ی پشتیبانی کم می‌شه.

صبا صبوحی