نمایش نتایج 1 تا 16 از 16

نام تاپیک: جستجو

  1. #1

    جستجو

    سلام
    پایگاه داده ای برای کتابخانه ای در نظر گرفتم که دارای 3 جدول به شرح زیر است:
    1. tbl_books :که محتویات این جدول مشخصات کتابهاست مثل کد کتاب, نام کتاب , انتشارات, قیمت, شابک, ویرایش و.....
    2. tbl_author : که محتویات این جدول شامل : کد نویسنده, نام نویسنده و نام خانوادگی نویسنده است.
    3. tbl_book_author: محتویات این جدول نیز شامل :کد کتاب و کد نویسنده است.
    من برای این نویسنده را در جدول tbl_books قرار ندادم چون ممکن است یک کتاب چندین نویسنده داشته باشد.حال در جستجوی یک کتاب که دارای 3 نویسنده می باشد چطور می توان نویسنده ها را کنار هم در یک ردیف نشان داد و با کاما اسامی را از هم جدا کرد؟؟

  2. #2
    یک راهی که من خودم زیاد از اون استفاده می کنم از این قراره:

    یک function تعریف کن که کد کتاب رو به عنوان ورودی میگیره و داخل اون یک متغیر از نوع nvarchar تعریف کن که با select ای که داخل جدول هایت می کنی اسامی نویسنده ها را پشت سر هم قرار داده و به متغیرت نسبت می دهد بعد این متغیر را با return به عنوان خروجی function در نظر بگیر
    حالا یک view تعریف کن که همه فیلدهای مد نظرت بعلاوه function ات را در select اون قرار میدی
    اگه در تعریف function مشکل داری بگو تا بیشتر راهنمایی کنم

  3. #3
    دوست عزیزم،
    همچنین اگر در SQL Server 2005 کار میکنین، میتونین User Defined Aggregate با NET. بنویسید که اساسا برای همین منظور در نظر گرفته شده و نسبت به روش مذکور در پست قبلی (که تنها روش برای 2000 هستش) سرعت مطلوب تری داره

  4. #4
    نقل قول نوشته شده توسط sahab555 مشاهده تاپیک
    یک راهی که من خودم زیاد از اون استفاده می کنم از این قراره:

    یک function تعریف کن که کد کتاب رو به عنوان ورودی میگیره و داخل اون یک متغیر از نوع nvarchar تعریف کن که با select ای که داخل جدول هایت می کنی اسامی نویسنده ها را پشت سر هم قرار داده و به متغیرت نسبت می دهد بعد این متغیر را با return به عنوان خروجی function در نظر بگیر
    حالا یک view تعریف کن که همه فیلدهای مد نظرت بعلاوه function ات را در select اون قرار میدی
    اگه در تعریف function مشکل داری بگو تا بیشتر راهنمایی کنم
    میشه در مورد function بیشتر توضیح بدید؟
    ممنون

  5. #5
    ممکنه در مورد User Defined Aggregate با Net. کمی توضیح بدین؟(یعنی در محیط net. باید کار کنم؟)
    ممنون

  6. #6
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276
    نقل قول نوشته شده توسط elahe_rahmanzadeh مشاهده تاپیک
    میشه در مورد function بیشتر توضیح بدید؟
    ممنون
    User Defined Function در SQL مانند Function ایی هست که شما در محیط برنامه نویسی میسازین و استفاده میکنین یعنی قابل ذخیره شدن هست مانند SP و نیز مقدار خروجی نیز دارد. از قابلیتهای Function : امکان فراخوانی آن در Query ها و همین طور در قسمت From , مربوط به Select میباشد و .....
    مثال

    In this example, a user-defined function, ISOweek, takes a date argument and calculates the ISO week number. For this function to calculate properly, SET DATEFIRST 1 must be invoked before the function is called.

    CREATE FUNCTION ISOweek (@DATE datetime)
    RETURNS int
    AS
    BEGIN
    DECLARE @ISOweek int
    SET @ISOweek= DATEPART(wk,@DATE)+1
    -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
    --Special cases: Jan 1-3 may belong to the previous year
    IF (@ISOweek=0)
    SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1
    AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
    --Special case: Dec 29-31 may belong to the next year
    IF ((DATEPART(mm,@DATE)=12) AND
    ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
    SET @ISOweek=1
    RETURN(@ISOweek)
    END

    Here is the function call. Notice that DATEFIRST is set to 1.

    SET DATEFIRST 1
    SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'
    Here is the result set.

    ISO Week
    ----------------
    52


    اطلاعات بیشتر داخل BOL هست

  7. #7
    از توضیحتون ممنون .ولی منظور من functionی بود که کاربر sahab555 گفته بودن!یعنی چطور در یک تابع می توان با select اسامی نویسنده ها رو کنار هم(با یک کاما) در یک متغیر (از نوع nvarchar) ریخت؟؟

  8. #8
    بله، برای User Defined Aggregate باید این تابع رو در NET. بسازین و در SQL Server استفاده کنین. اما در 2000 میتونین به این شکل عمل کنین (این تابع نام کشور رو دریافت میکنه و کد مشتریهایی که از این کشور داریم رو برمیگردونه. دقت کنید که من Group By رو برای حذف کشورهای اضافی قید کردم)

    use northwind
    go

    create function fn_Concat(@country nvarchar(20))
    returns nvarchar(4000)
    as
    begin
    declare @tmp nvarchar(4000)
    set @tmp=''
    select @tmp=@tmp+ ',' + isnull(customerid,'') from customers where country=@country
    set @tmp=right(@tmp,len(@tmp)-1)
    return @tmp
    end
    go

    select dbo.fn_Concat('uk')
    GO
    select country,dbo.fn_Concat(country) from customers group by country

  9. #9
    سلام
    نیازی به function و یا استفاده از sqlserver 2005 نیست با COALESCE می توانید اینکار را انجام دهید .

    DECLARE @list nvarchar(100)
    SET @list = ''
    select @list=COALESCE(@list+ ',','')+cast(myField as nvarchar) from myTable



    با این روش ستون myField از جدول myTable را می توانید در یک سطر به صورت جدا شده با کاما تحویل بگیرید

  10. #10

    نقل قول: جستجو

    با سلام خدمت دوستان من هم همچین مشکلی دارم با 2005
    من خیلی سعی کردم از کد دوستمون deuce استفاده کنم اما نمشه گروپ کرد با این روش به کد و خطای ان نگاه کنید.

    SELECT DISTINCT PersonId,COALESCE(@list+ ',','')+cast(WorkGrpId as nvarchar)
    FROM DayWork
    WHERE (DDATE BETWEEN @sDate AND @EDate)
    group by DayWork.PersonId

    خطا:

    Msg 8120, Level 16, State 1, Line 29
    Column 'DayWork.WorkGrpId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    در ضمن خواستم فیلد گروه رو توسط سلکت تو در تو بیارم اما باز همین خطا رو داد.
    در مورد استفاده از فانکشن ها هم من نتونستم که بفهمم که تابع دوست مون کامیار چه ربطی به موضوع داره شاید فقط خواستن کار با توابع رو یاد بدن....
    فکر کنم از بخوایم از تابع استفاده کنیم باید از کرسر ها هم استفاده کنیم که کمی پیچیده و کند می شه و...

  11. #11

    نقل قول: جستجو

    UDA یا User Defined Aggregate در حقیقت یک تابع هستش، ورودی میگیره و خروجی برمیگردونه. ولی SQL Server به شکلی متفاوت با اون رفتار میکنه درست مثل سایر توابع Aggregation (یعنی MIN,MAX,SUM و ..). تفاوتش با توابع عادی در اینجاست که میتونیم ازش در محاسبات گروهی استفاده کنیم و محاسبات دلخواه رو روی گروههای اطلاعات انجام بدیم. فرض کنین به جای SUM، شما میخواین در هر گروه از اطلاعات عمل ضرب بین اعداد انجام بشه به جای جمع. لذا میتونین در NET. یک UDA بنویسید و ازش در SQL Server استفاده کنید. از اونجاییکه UDA برای محاسبات گروهی استفاده میشه، SQL Server به خوبی میدونه به چه صورت ازش استفاده کنه تا بهینه ترین الگورتیمها به خدمت گرفته بشن

  12. #12

    نقل قول: جستجو

    با سلام و عرض ادب و تبریک عید فطر
    ممنون که در مورد UDA توضیح دادین
    اما مشکل من اینه که من به ازای هر کد پرسنل باید کدهای گروه ان که در فیلد دیگری از همین جدول هست رو بردارم و توسط اون نام گروه ها را از جدول گروه ها پیدا کنم و با کاما جدا کنم و کنار هم بچینم.
    یعنی شما می گی من کد پرسنل رو ورودی تابع کنم و خودم تو تابع بیام دوباره به ازای هر کد پرسنل گروه های اون رو یکی یکی بردارم و اسم اونوا رو دستی در بیارم و خروجی تابع بدم؟

  13. #13

    نقل قول: جستجو

    ساختار جداول شما رو اطلاعی ندارم. شاید لازم باشه Join کنین یا از Subquery استفاده کنین. اگر اصل مفهوم UDA و Aggregation رو درک کرده باشین براحتی میتونین اینها رو با هم ترکیب کنین. مهم دونستن این نکته هست که هر کدوم از قابلیتها دقیقا کجای کار رو میتونن برای ما انجام بدن

  14. #14

    نقل قول: جستجو

    سلام
    من شرمنده ام فکر کنم هنوز نگرفتم
    من الان فقط می تونم یه تابع معمولی بنویسم و و وروی اون شماره پرسنل باشه و تو تابع توسط کرسر ها اطلاعات رو کنار هم بچینم و بدم خروجی اما می دونم که روش خوبی نیست
    لطفاً یه مثال بزنین که چطور باید از uda استفاده کنم من تا به حال تو دات نت تابعی ننوشتم که تو اس کیو ال فراخوانی بشه
    بازم ممنونم

  15. #15

    نقل قول: جستجو

    متاسفانه UDA مطلبی نیست که من با چند سطر توضیح بتونم از طریق این تاپیک همش رو منتقل کنم. توصیه میکنم اول شما در مورد استفاده از CLR در SQL Server مطالعه کنید و بعد در اینترنت دنبال مثالهای UDA بگردین. این لینک میتونه نقطه خوبی برای شروع باشه:
    http://dotnetslackers.com/articles/s...e-Objects.aspx

  16. #16

    نقل قول: جستجو

    نقل قول نوشته شده توسط rezaei manesh مشاهده تاپیک
    سلام
    من شرمنده ام فکر کنم هنوز نگرفتم
    من الان فقط می تونم یه تابع معمولی بنویسم و و وروی اون شماره پرسنل باشه و تو تابع توسط کرسر ها اطلاعات رو کنار هم بچینم و بدم خروجی اما می دونم که روش خوبی نیست
    لطفاً یه مثال بزنین که چطور باید از uda استفاده کنم من تا به حال تو دات نت تابعی ننوشتم که تو اس کیو ال فراخوانی بشه
    بازم ممنونم
    دوست عزیز مشکل شما حل شد؟
    اگه امکان داره این تایپیک را هم ببینید
    https://barnamenevis.org/showthread.php?t=164319

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •