2017-10-17 173 views
-1

當我想在SQL Server中運行以下查詢時,出現以下2個錯誤: - 如何解決錯誤?你可以幫我嗎?運行SQL Server存儲過程(更新)

運行:

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

錯誤:

消息156,15級,狀態1,53號線 關鍵字 'ORDER' 附近有語法錯誤。

Msg 102,Level 15,State 1,Line 53 '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

注意:你應該**不要**爲你的stor使用'sp_'前綴編輯程序。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

+3

你應該使用print @ devv_來顯示你的錯誤並解決。 –

+0

'@ PageN'o和'@ RowCountPerPage'必須連接在... – scsimon

回答

1

在你旁邊的最後一行,更改設置爲此:

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

你需要一個條款,如果所有PARAMS是 ''(1 = 1),並採取@RowCountPerPage字符串外部:

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_