View Full Version : یافتن وجود یک مقدار با استفاده از تابع یا SP
bpzone
دوشنبه 20 اردیبهشت 1389, 11:08 صبح
با سلام
من قصد دارم که یک تابع بنویسم که یک ورودی داشته باشه ( ID تعریف شده برای یک وسیله )
حالا چجوری می تونم با استفاده از تابع یا SP چک کنم که اگه پارامتر ورودی در بانک وجود داشته باشه مقدار 0 و در غیر این صورت مقدار 1 رو برگردونه ؟!
- قصد دارم از این تابع در برنامه نویسی #C استفاده کنم
spring69
دوشنبه 20 اردیبهشت 1389, 11:15 صبح
سلام.
یه کوئری جدید بساز و کد زیر رو بنویس و اجرا کن.
create FUNCTION f_check
(
@pas nvarchar(50)
)
RETURNS int
AS
BEGIN
DECLARE @c int
if exists (SELECT * from tblsettings where pas=@pas)
set @c=1
else
set @c= 0
return @c
END
بعد توی سی شارپ میتونی اینطوری ازش استفاده کنی:
SqlCommand cmd = new SqlCommand("select dbo.f_check(@pas)", cnn);
cmd.Parameters.AddWithValue("@pas", txtPas.Text);
ASKaffash
دوشنبه 20 اردیبهشت 1389, 11:44 صبح
سلام
اینهم یک راه حل :
Create Function Found(@F Int)
Returns Tinyint
Begin
Return IsNull((Select 1 From T Where F=@F),0)
End
روش استفاده :
با استفاده از یک SQLCommand دستور CommandText شما این باشد :
Select R=dbo.Found(10)
bpzone
دوشنبه 20 اردیبهشت 1389, 12:16 عصر
با تشکر از دوستان
کدوم راه سریعتر هست و زمان کمتری رو میگیره ؟
روش اول
create FUNCTION f_check
(
@pas nvarchar(50)
)
RETURNS int
AS
BEGIN
DECLARE @c int
if exists (SELECT * from tblsettings where pas=@pas)
set @c=1
else
set @c= 0
return @c
END
روش دوم
Create Function Found(@F Int)
Returns Tinyint
Begin
Return IsNull((Select 1 From T Where F=@F),0)
End
spring69
دوشنبه 20 اردیبهشت 1389, 12:42 عصر
زياد تفاوتي ندارن.
ولي كد دوستمون چون بازگشتي TinyInt داره و متغيري براي مقدار بازگشتي هم نداره، سريعتر و بهينه تره.
Good Luck
محمد سلیم آبادی
دوشنبه 20 اردیبهشت 1389, 15:13 عصر
سلام
اینهم یک راه حل :
Create Function Found(@F Int)
Returns Tinyint
Begin
Return IsNull((Select 1 From T Where F=@F),0)
End
روش استفاده :
با استفاده از یک SQLCommand دستور CommandText شما این باشد :
Select R=dbo.Found(10)
سلام،
این روش در یک سناریوی خاصی درست اجرا خواهد شد. اگر subquery که در تابع isnull تعریف کردین بیش از یک سطر (مقدار) بر گرداند مشکل ایجاد خواهد شد.
بهتره دستور را از هر مشکل احتمالی ایزوله کنیم:
Create Function Found(@F Int)
Returns Tinyint
Begin
Return IsNull((Select Top 1 1 From T Where F=@F),0)
End
محمد سلیم آبادی
دوشنبه 20 اردیبهشت 1389, 15:34 عصر
زياد تفاوتي ندارن.
ولي كد دوستمون چون بازگشتي TinyInt داره و متغيري براي مقدار بازگشتي هم نداره، سريعتر و بهينه تره.
Good Luck
در این مورد چون تنها به مقادیر 0 و 1 احتیاج هست می تونید به جای نوع INT یا TinyInt از نوع BIT استفاده کنید.
ASKaffash
سه شنبه 21 اردیبهشت 1389, 10:22 صبح
سلام
موضوع ID وسیله است پس بیش از یک رکورد نداریم (ظاهرا کلید است)
محمد سلیم آبادی
سه شنبه 21 اردیبهشت 1389, 14:00 عصر
اگر بخواهم از روشی استفاده کنم اون این خواهد بود:
CREATE FUNCTION msalim (@id INT) RETURNS BIT AS
BEGIN
RETURN (CASE WHEN NOT EXISTS(SELECT NULL FROM table_name WHERE id=@id) THEN 0 ELSE 1 END)
END
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.