2017-10-17 1 views
-1

Je reçois les 2 erreurs suivantes lorsque je veux exécuter la requête suivante dans SQL Server - comment puis-je résoudre les erreurs? Pouvez-vous m'aider?Exécution de la procédure stockée SQL Server (mise à jour)

Run:

exec [dbo].[sp_siparisTest] 0,25,'','','' 

Erreurs:

Msg 156, niveau 15, état 1, ligne 53 syntaxe incorrecte près du mot-clé 'ORDER'.

Msg 102, niveau 15, état 1, ligne 53 Syntaxe incorrecte proche de '25'.

ALTER PROC [dbo].[sp_siparisTest] 
 
(
 
    @PageNo INT, 
 
    @RowCountPerPage INT, 
 
    @adsoyadfilter NVARCHAR(50), 
 
    @odemetip NVARCHAR(20), 
 
    @durumu NVARCHAR(20) 
 
) 
 
AS 
 
BEGIN 
 
DECLARE @devam_ nvarchar(max) 
 
SET @devam_ ='SELECT 
 
u.AdiSoyadi as AdSoyad, 
 
ot.Adi as OdemeTipAdi, 
 
sd.Adi as SiparisDurumAdi, 
 
s.OlusturmaTarihi as OlusturmaTarihi, 
 
s.GenelToplam as GenelToplam 
 
FROM 
 
\t Siparis as s with(NOLOCK) 
 
inner join 
 
\t SiparisDurum as sd with(NOLOCK) on s.Durumu=sd.Id 
 
inner join 
 
\t Uye as u with(NOLOCK) on s.Uye_Id=u.Id 
 
inner join 
 
\t OdemeTip as ot with(NOLOCK) on s.OdemeTip=ot.Id where ' \t 
 
IF(@adsoyadfilter !='') 
 
\t SET @devam_ += '(u.AdiSoyadi LIKE ''%'' + '+ @adsoyadfilter +' + ''%'') AND' 
 
IF(@odemetip != '') 
 
\t SET @devam_ += ' ot.Id IN(SELECT Value FROM fn_Split('+ @odemetip +' , '','')) AND' 
 
IF(@odemetip != '') 
 
\t SET @devam_ += ' s.Durumu IN(SELECT Value FROM fn_Split('[email protected] +','',''))' 
 
SET @devam_ +=' ORDER BY s.Id OFFSET (' + cast(@PageNo as nvarchar(255)) + ') ROWS FETCH NEXT (' + cast(@RowCountPerPage as nvarchar(255)) + ') ROWS ONLY' 
 
END 
 

 
EXECUTE sp_executesql @devam_

+5

Remarque: vous ne devez pas utiliser le préfixe 'sp_' pour votre stockage procédures ed. Microsoft a [réservé ce préfixe pour son propre usage (voir * Naming Stored Procedures *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx), et vous courez le risque d'un conflit de noms dans le futur. [Il est également mauvais pour les performances de votre procédure stockée] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Il vaut mieux éviter simplement 'sp_' et utiliser autre chose comme préfixe - ou pas de préfixe du tout! –

+3

Vous devriez utiliser print @devam_ pour montrer votre erreur et résolu. –

+0

'@ PageN'o et' @ RowCountPerPage' doivent être concaténés dans ... – scsimon

Répondre

1

Sur votre côté de la dernière ligne, changer le SET à ceci:

SET @devam_ +=' ORDER BY s.Id OFFSET (' + cast(@PageNo as varchar(64)) + ') ROWS FETCH NEXT (' + cast(@RowCountPerPage as varchar(64)) + ') ROWS ONLY)' 
1

Vous avez besoin d'une clause si tous les params sont '' (1 = 1) et prendre @RowCountPerPage en dehors de la chaîne:

ALTER PROC sp_siparisTest 
(
    @PageNo INT, 
    @RowCountPerPage INT, 
    @adsoyadfilter NVARCHAR(50), 
    @odemetip NVARCHAR(20), 
    @durumu NVARCHAR(20) 
) 
AS 
BEGIN 
DECLARE @devam_ nvarchar(max) 
SET @devam_ = 'SELECT 
u.AdiSoyadi as AdSoyad, 
ot.Adi as OdemeTipAdi, 
sd.Adi as SiparisDurumAdi, 
s.OlusturmaTarihi as OlusturmaTarihi, 
s.GenelToplam as GenelToplam 
FROM 
    Siparis as s with(NOLOCK) 
inner join 
    SiparisDurum as sd with(NOLOCK) on s.Durumu=sd.Id 
inner join 
    Uye as u with(NOLOCK) on s.Uye_Id=u.Id 
inner join 
    OdemeTip as ot with(NOLOCK) on s.OdemeTip=ot.Id where(' 

IF(@adsoyadfilter !='') 
    SET @devam_ += '(u.AdiSoyadi LIKE ''%'' + @adsoyadfilter + ''%'') AND' 
IF(@odemetip != '') 
    SET @devam_ += ' ot.Id IN(SELECT Value FROM fn_Split(@odemetip, '','')) AND' 
IF(@odemetip != '') 
    SET @devam_ += ' AND s.Durumu IN(SELECT Value FROM fn_Split(@durumu,'','')) ' 

if @adsoyadfilter + @odemetip + @odemetip = '' SET @devam_ += '1=1) ' 

SET @devam_ +=' ORDER BY s.Id OFFSET (' + cast(@PageNo as nvarchar(255)) + ') ROWS FETCH NEXT (' + cast(@RowCountPerPage as nvarchar(255)) + ') ROWS ONLY' 
END 

EXECUTE sp_executesql @devam_