ورود

View Full Version : نمایش رکوردهای جدول فرزند بصورت رشته



shaghaghi
چهارشنبه 24 تیر 1388, 14:28 عصر
سلام
من دو تا جدول با رابطه پدر و فرزندی دارم و قصد دارم داخل یک view از جدول پدر فیلدی داشته باشم که رکوردهای مرتبط را در جدول فرزند با ویرگول بهم بچسباند و بصورت یک رشته نمایش بدهد
برای این منظور ابتدا از کرسری داخل تابع scaler استفاده کردم که بسیار کند بود بعد از آن بجای کرسر از select مخصوصی درون تابع استفاده کردم:


dim @out as varchar(100)
set @out=''
select @out=@out + ','+ fld1 from tbl2
retrn (@out)

اما همچنان کند است
ممنون می شوم اگر راه حلی جهت بهبود سرعت اجرا به نظر دوستان می رسد بنده را راهنمایی نمایند

ASKaffash
چهارشنبه 24 تیر 1388, 15:26 عصر
سلام
همان روش کرسر روش خوبی است درست است که کرسر ماهیت کندی دارد ولی نه این مقدار که میگوئید لطفا دستور Select جاوی کرسر را قرار دهید تا بیشتر تحلیل شود

shaghaghi
چهارشنبه 31 تیر 1388, 11:46 صبح
من بدنبال راه حلی می گردم که از فانکشن استفاده نکنم

محمد سلیم آبادی
چهارشنبه 31 تیر 1388, 12:24 عصر
شما برای اینکه چندین فیلد را در یک رشته قرار دهید و آنها را با کاما از هم تفکیک کنید می توانید از کد زیر استفاده کنید.
فراموش نکنید تا جایی که ممکن است از Query به جای برنامه نویسی (Cursor) استفاده کنید.



DECLARE @NameList nvarchar(1000)
SELECT @NameList =CASE
WHEN Name_1 IS NOT NULL
THEN COALESCE(@NameList +', ','')+ Name_1
ELSE COALESCE(@NameList +'','')
END
FROM Table_1
SELECT @NameList

علیرضا مداح
چهارشنبه 31 تیر 1388, 13:06 عصر
سلام دوست عزیز،
در این خصوص روش های گوناگونی وجود دارد،
1)باید حتی الامکان از استفاده از CURSOR ها پرهیز شود،
2)تابع COALESCE نیز برای این منظور مناسب نیست، چون این تابع همانند ISNULL عمل کرده، با این تفاوت که چند پارامتر را دریافت کرده و اولین مقدار مخالف NULL را بر می گرداند، پس می توان بدون استفاده از این تابع نیز به هدف رسید،
3)در صورتیکه از SQL Server 2005/2008 استفاده می کنید، روش پیشنهادی بهره گیری از دستور FOR XML PATH می باشد،
دو مطلب زیر را به دقت مطالعه نمایید:
Coalesce is not the answer to string concatentation in T-SQL - Rob Farley (http://msmvps.com/blogs/robfarley/archive/2007/04/08/coalesce-is-not-the-answer-to-string-concatentation-in-t-sql.aspx)
MSDN Code Gallery - Create A Comma Delimited List From a Column (http://code.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=createacommadelimitedlist)
،/

AminSobati
چهارشنبه 31 تیر 1388, 13:15 عصر
از نسخه 2005 به بعد بهترين راه استفاده از User Defined Aggregate هست