PDA

View Full Version : scale function in sql



آرام جان گل
دوشنبه 01 مرداد 1386, 23:52 عصر
سلام

من یک select می نویسم که تعداد رکوردهای یافته شده را به من نشان می دهد

این select در یک sp می باشد
سوال من :
آیا برای یافتن تعداد رکوردهای یافته شده باید ازcale function استفاده کرد ؟

اصلا کار این توابع در sql چیست و در چه زمانهایی از آن استفاده می شود ؟
ممکنه که از این توابع یک مثال هم برام بزارید؟

من sp را می زارم اگه لازمه که این sp با تابع نوشته بشه تطبیقش می دید تا بفهمم؟
چون ن فعلا نه کا ر کردن با این توابع را بلدم و نه امکان داره که از کتابی جایی ببینم

sp من:


CREATE PROCEDURE dbo.StoredProcedure6
(
@startdate nvarchar (50),
@depid_ int
)
AS
SELECT COUNT(Patient.patid) AS [تعداد بیماران],
Patient.startdate AS [تاریخ بستری],
Dep.depname AS [نام بخش]
FROM Dep INNER JOIN
Patient ON Dep.depid = Patient.depid_
GROUP BY Patient.patid,
Patient.startdate,
Patient.depid_, Dep.depname
HAVING (Patient.startdate = '@startdate')
AND (Patient.depid_ = @depid_)
RETURN


مرسی
لطفا راهنمایی کنید

Kamyar.Kimiyabeigi
سه شنبه 02 مرداد 1386, 08:50 صبح
شما میتونین از

select @@rowcount
استفاده کنین و قرار بدین توی یک پارامتر از نوع خروجی

آرام جان گل
سه شنبه 02 مرداد 1386, 22:02 عصر
سلام
این جواب کامل نبود
من طرز استفاده از تابع را بلد نیستم
بعدش هم این select rowcount یک دستور sql است ؟

لطفا کامل توضیح بدید
مرسی

whitehat
چهارشنبه 03 مرداد 1386, 07:34 صبح
من یک select می نویسم که تعداد رکوردهای یافته شده را به من نشان می دهد
دستوری که شما نوشتید یک جدول را به صورت خروجی بر می گرداند

بعدش هم این select rowcount یک دستور sql است ؟
این دستور را بعد از Select خود بگذارید ، در این صورت تعداد سطر ها را خواهید داشت (می توانید @@rowcount را به عنوان خروجی بر گردانید)

Kamyar.Kimiyabeigi
چهارشنبه 03 مرداد 1386, 07:46 صبح
ببینید بعد از هر دستور Select تعداد رکوردهایی که حاصل از این select هست داخل یک متغیر سیستمی به نام rowcount@@ قرار میگیره که شما اگر بلافاصله بعد از دستور select تون بنویسید

select @@rowcount
تعداد رکوردهای select تون رو میده. در واقع در مورد سوال شما لازم نیست خودتون count رو select کنین بلکه میتونین خود Patient.patid را به تنهایی select کنین و بعد از rowcount@@ استفاده کنین
مثال اول

USE Northwind
GO

DECLARE @Row_Count INT

SELECT @Row_Count = COUNT(CompanyName)
FROM dbo.Customers

PRINT(@Row_Count)

مثال دوم


USE Northwind
GO

DECLARE @Row_Count INT

SELECT CompanyName
FROM dbo.Customers

SELECT @Row_Count = @@ROWCOUNT

PRINT(@Row_Count)

آرام جان گل
چهارشنبه 03 مرداد 1386, 11:14 صبح
سلام
مرسی از جوابتون

حالا یک سوال دیگر :

من می خواهم که این تعداد رکورد های یافته شده را در یک لیبل در محیط سی شارپ نمایش دهم .

چون در حقیقت این sp تعداد بیمارانی رانشان می دهد که در تاریخ فلان در بخش فلان بستری شده اند و

درسته به قول شما نیازی به یک select نیست که یک جدول بر گردانه .
حالا من این متغییر را چطوری به سی شارپ پاس بدهم؟

فکر کنم که طبق فکر اولیه من باید این متغییر از طریق یک scale function بدست بیاورم و بعد به سی شارپ پاس بدهم

شما لطف کردید و به من راهنمایی کردید
ولی می خواستم خواهش کنم که بگید (کامل کامل ) که چطوری این متغییر را به سی شارپ پاس بدم

مرسی خیلی زیاد

Kamyar.Kimiyabeigi
چهارشنبه 03 مرداد 1386, 14:48 عصر
سلام
مرسی از جوابتون

حالا یک سوال دیگر :

من می خواهم که این تعداد رکورد های یافته شده را در یک لیبل در محیط سی شارپ نمایش دهم .

چون در حقیقت این sp تعداد بیمارانی رانشان می دهد که در تاریخ فلان در بخش فلان بستری شده اند و

درسته به قول شما نیازی به یک select نیست که یک جدول بر گردانه .
حالا من این متغییر را چطوری به سی شارپ پاس بدهم؟

فکر کنم که طبق فکر اولیه من باید این متغییر از طریق یک scale function بدست بیاورم و بعد به سی شارپ پاس بدهم

شما لطف کردید و به من راهنمایی کردید
ولی می خواستم خواهش کنم که بگید (کامل کامل ) که چطوری این متغییر را به سی شارپ پاس بدم

مرسی خیلی زیاد
در #c من اطلاعی ندارم فکر کنم اگر در بخش مربوطش مطرح کنین هم بهتره و هم زودتر به جواب میرسین

whitehat
چهارشنبه 03 مرداد 1386, 15:56 عصر
اگر Stored Procedure شما فقط یک مقدار برگرداند می توانید از تابع ExecuteScaler استفاده کنید
فرض کنید SP زیر موجود است


CREATE PROCEDURE StoredProcedureName
AS
Select count(*) From TableName
در C# بصورت زیر عمل کنید


int m_QueryCount = 0;
SqlConnection conn = new SqlConnection("Persist Security Info=False;User ID=sa;Initial Catalog=MyTemp;Data Source=.;password=123");
SqlCommand comm = new SqlCommand("StoredProcedureName", conn);
try
{
comm.CommandType = CommandType.StoredProcedure;
comm.Connection.Open();
m_QueryCount = (int)comm.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
comm.Connection.Close();
}
که باید شما بر اساس Connection String خود آنرا تغییر دهید
در صورتی که پارامترهایی به SP می فرستید آنرا به SqlCommandText اضافه کنید
(بهتره سوالهای C# را در بخش خودش بپرسید تا به جوابهای مطلوب تری برسید)