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

نام تاپیک: خطا در سینتکس یک جستجو چند پارامتری (داینامیک)

  1. #1

    خطا در سینتکس یک جستجو چند پارامتری (داینامیک)

    سلام خدمت دوستان
    یک SP داینامیک برای جستجو بر اساس چند پارامتر نوشتم. ولی به سینتکس ایراد میگیره. خطا در مقدار دهی SELECT @sql = است، برای کاراکتر Space و / که استفاده کردم .
    این Select به صورت جدا به درستی عمل می کند. ولی در اینجا چون در بین ' ' قرار گرفته باعث خطای نگارش می شود.

    ممنون میشم راهنماییم کنید که چطور خطا رو رفع کنم


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    -- ================================================== ========================================
    -- Entity Name: s_Courses_SelectCourses
    -- Author: M Razavi
    -- Create date: 5/29/2010 8:55:30 AM
    -- Description: This stored procedure is intended for selecting a specific row from Courses table
    -- ================================================== ========================================
    ALTER Procedure [dbo].[s_Courses_Search]

    @stnid int = NULL,
    @ttpid int = NULL,
    @lctid int = NULL,
    @crsstatus int = NULL,
    @debug bit = 0
    AS


    DECLARE @sql nvarchar(4000),
    @paramlist nvarchar(4000)

    SELECT @sql =
    'SELECT dbo.Courses.crsid, dbo.Skill.sklname AS حرفه, dbo.Mentor.mntfamily +' '+ dbo.Mentor.mntname AS [نام مربی], SUBSTRING(dbo.Courses.crsstartdate,
    1, 4) + '/' + SUBSTRING(dbo.Courses.crsstartdate, 5, 2) + '/' + SUBSTRING(dbo.Courses.crsstartdate, 5, 2) AS [تاریخ شروع],
    SUBSTRING(dbo.Courses.crsenddate, 1, 4) + '/' + SUBSTRING(dbo.Courses.crsenddate, 5, 2) + '/' + SUBSTRING(dbo.Courses.crsenddate, 5, 2)
    AS [تاریخ پایان], SUBSTRING(dbo.Courses.crsexam1date, 1, 4) + '/' + SUBSTRING(dbo.Courses.crsexam1date, 5, 2)
    + '/' + SUBSTRING(dbo.Courses.crsexam1date, 5, 2) AS [تاریخ آزمون کتبی],SUBSTRING(dbo.Courses.crsexam2date, 1, 4) + '/' + SUBSTRING(dbo.Courses.crsexam2date, 5, 2)
    + '/' + SUBSTRING(dbo.Courses.crsexam2date, 5, 2) AS [تاریخ آزمون عملی], dbo.Courses.crsregisteredno AS [تعداد معرفی شده],
    dbo.Courses.crsabsentno AS [تعداد غایبین], dbo.Courses.crspassedno AS [تعداد قبولین]
    FROM dbo.Courses INNER JOIN
    dbo.Location ON dbo.Courses.lctid = dbo.Location.lctid INNER JOIN
    dbo.Skill ON dbo.Courses.sklid = dbo.Skill.sklid AND dbo.Courses.sklid = dbo.Skill.sklid INNER JOIN
    dbo.Mentor ON dbo.Courses.mntid = dbo.Mentor.mntid INNER JOIN
    dbo.Station ON dbo.Courses.stnid = dbo.Station.stnid INNER JOIN
    dbo.TutorialType ON dbo.Courses.ttpid = dbo.TutorialType.ttpid
    WHERE 1 = 1'

    IF @stnid IS NOT NULL
    SELECT @sql = @sql + ' AND Courses.stnid = @xstnid'

    IF @ttpid IS NOT NULL
    SELECT @sql = @sql + ' AND Courses.ttpid = @xttpid'

    IF @lctid IS NOT NULL
    SELECT @sql = @sql + ' AND Courses.lctid = @xlctid'

    IF @crsstatus IS NOT NULL
    SELECT @sql = @sql + ' AND Courses.crsstatus = @xcrsstatus'


    SELECT @sql = @sql + ' ORDER BY Courses.stnid'

    IF @debug = 1
    PRINT @sql

    SELECT @paramlist = '@xstnid int = NULL,
    @xttpid int = NULL,
    @xlctid int = NULL,
    @xcrsstatus int = NULL'

    EXEC sp_executesql @sql, @paramlist,
    @stnid, @ttpid, @lctid, @crsstatus



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

    برنولی

  2. #2

    نقل قول: خطا در سینتکس یک جستجو چند پارامتری (داینامیک)

    سلام،
    مشکل به نقل قول ها بر میگرده. ابتدا درک صحیحی از آن پیدا کنید سپس کار را ادامه دهید:
    http://www.30sharp.com/article/13/22...ql-server.aspx
    وبلاگ من (Advanced SQL Querying)

  3. #3

    نقل قول: خطا در سینتکس یک جستجو چند پارامتری (داینامیک)

    مراقب باشید که شما از حروف فارسی هم در رشته استفاده کردین که باید قبل از آن رشته ها کاراکتر N را قرار بدین تا صحیح بشه.
    در هر حال اگر با مطالعه مطلبی که بهش لینک دادم نتوانستین این مشکل را برطرف کنید پیشنهاد می کنم از یک تکنیک Static و بسیار ساده زیر این مشکل را حل کنید:
    SELECT ...
    ...
    WHERE Courses.stnid = COALESCE(@xstnid, Courses.stnid)
    AND Courses.ttpid = COALESCE(@xttpid, Courses.ttpid)
    AND Courses.lctid = COALESCE(@xlctid, Courses.lctid)
    AND Courses.crsstatus =COALESCE(@xcrsstatus, Courses.crsstatus);
    وبلاگ من (Advanced SQL Querying)

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

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