PDA

View Full Version : Select یک سطر خاص



nourooz
یک شنبه 10 شهریور 1392, 23:22 عصر
سلام
با این که سوال ظاهرا ساده ای هست اما من چیزی نیافتم.

cmd.CommandText = "SELECT [title] FROM [table]"
چه چیزی به دستور بالا باید اضافه شود که مثلا فقط row 10 را فراخوانی کند
(چیزی که فهمیدم اینه که شرط بزاریم ولی مشکل من اینه که ستون شماره سطر(id) ندارم.)

r. salehi
دوشنبه 11 شهریور 1392, 11:47 صبح
دوست عزیز وقتی ندونید دنبال چی می گردید خوب مسلما نمیتونید پیداش کنید.
سطری که دنبالش هستید باید یک مشخصه شناخته شده برای شما داشته باشه که بر اساس اون بتونید پیداش کنید یا نه؟

nourooz
دوشنبه 11 شهریور 1392, 16:23 عصر
خب منظور من اینه که چجوری میتونیم بگیم ستون فلان ولی نمیتونیم بگیم سطر فلان.و خودش بشماره. مگه مثل جدول نیست؟یعنی چیزی به نام سطر را نمیفهمه؟
و آیا باید خودم به صورت دستی ستون شماره را اضافه کنم؟

r. salehi
دوشنبه 11 شهریور 1392, 23:05 عصر
سلام مجدد
فرض کنید یک جدول دارید که دارای فیلدهای زیر هست
نام - نام خانوادگی - محل تولد - جنسیت - سال تولد - نام پدر - تحصیلات - رشته تحصیلی

خوب شما این جدول را با ستونهای بالا ایجاد می کنید. حالا برای پیدا کردن یک سطر یا چند سطر خاص شما باید عملیات جستوجو را بر اساس یک سری شرط انجام بدید مثلا سطرهایی انتخاب بشه که محل تولد تهران - جنسیت مذکر - تحصیلات لیسانس و سال تولد 1360 باشه. پس شما باید بدونید که دنبال چه کسی یا چه کسانی با چه مشخصاتی می گردید تا بتونید اون افراد را که واجد خصوصیات مورد نظرتون هست را در جدول پیدا کنید.
به نظر میرسه تازه وارد زمینه بانکهای اطلاعاتی شدید. در نظر داشته باشید تا مفاهیمش دستتون بیاد یه کم طول میکشه. اما بعد از اینکه درکش کردید می بینید نه تنها سخت نیست بلکه خیلی هم شیرینه. فقط یه مدتی باید تمرین کنید و باهاش کشتی بگیرید.
موفق باشید

مهرداد صفا
سه شنبه 12 شهریور 1392, 11:32 صبح
با سلام.


DECLARE MyCursor SCROLL CURSOR FOR SELECT [title] FROM [table] FOR READ ONLY;
OPEN MyCursor;
DECLARE @i INT;
DECLARE @title NVARCHAR(100);

SET @i=0;
WHILE(@i<10)
BEGIN
FETCH MyCursor INTO @title;
SET @i=@i+1;
END


CLOSE MyCursor;
DEALLOCATE MyCursor;
SELECT @title;

Salah Sanjabian
سه شنبه 12 شهریور 1392, 11:51 صبح
سلام دوست عزیز بهتره از کرسر به عنوان آخرین راه حل استفاده کنید. نمونه داده زیر رو ببینید

DECLARE @T TABLE
(
Title NVARCHAR(100)
)

INSERT INTO @T
( Title )VALUES ( N'C#‎‎‎‎‎'),('VB'),('C++‎‎‎‎‎' ),('C'),('Delphi'),('VB.Net')

INSERT INTO @T ( Title )SELECT * FROM @T
INSERT INTO @T ( Title )SELECT * FROM @T


اینجا هم رکورد 10 رو نمایش میدهیم

SELECT Title FROM
(
SELECT Title,ROW_NUMBER()OVER(ORDER BY Title) AS Row FROM @T
) X WHERE Row =10


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


SELECT Title FROM
(
SELECT Title,ROW_NUMBER()OVER(ORDER BY (SELECT 0)) AS Row FROM @T
) X WHERE Row =10

مهرداد صفا
سه شنبه 12 شهریور 1392, 14:39 عصر
سلام دوست عزیز بهتره از کرسر به عنوان آخرین راه حل استفاده کنید. نمونه داده زیر رو ببینید

DECLARE @T TABLE
(
Title NVARCHAR(100)
)

INSERT INTO @T
( Title )VALUES ( N'C#‎‎‎‎‎‎'),('VB'),('C++‎‎‎‎ ‎'),('C'),('Delphi'),('VB.Net')

INSERT INTO @T ( Title )SELECT * FROM @T
INSERT INTO @T ( Title )SELECT * FROM @T


اینجا هم رکورد 10 رو نمایش میدهیم

SELECT Title FROM
(
SELECT Title,ROW_NUMBER()OVER(ORDER BY Title) AS Row FROM @T
) X WHERE Row =10


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


SELECT Title FROM
(
SELECT Title,ROW_NUMBER()OVER(ORDER BY (SELECT 0)) AS Row FROM @T
) X WHERE Row =10



سلام.
درسته. ولی از نظر سرعت و کارایی (مخصوصا زمانی که تعداد رکوردها زیاد باشد) حتی بدون در نظر گرفتن order کل جدول باید دو بار (یک بار خود جدول و یک بار نتیجه جستجوی قبلی) برای گرفتن یک فیلد پویش شود که فشار زیادی به رم و cpu وارد می شود و در زمانی که سرعت برای ما اهمیت داشته باشد به صرفه نیست. در حالیکه با استفاده از CURSOR تنها رکوردهای قبل از رکورد مورد نظر پیمایش می شوند.

Salah Sanjabian
چهارشنبه 13 شهریور 1392, 19:12 عصر
دوست عزیز هر دستور Fetch تو کرسر معادل بک دستور Select هست به این قضیه به صورت Set-Based نگاه کنید