亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

存儲過程翻頁問題

存儲過程翻頁問題

呼如林 2018-12-07 12:06:49
在關鍵字 'like' 附近有語法錯誤。 SELECT TOP 20 PID,Pbrand,Pnamecn FROM ProductList WHERE Pbrand like '%88%' ORDER BY PID DESC 問題:一直報錯"在關鍵字 'like' 附近有語法錯誤",上面的語句是我把存儲過程里的執行語句的輸出,檢查感覺沒問題,然后拿到"sql 查詢分析器"里執行也可以查詢出數據,但就不知道為什么還是會一直報"在關鍵字 'like' 附近有語法錯誤"數據庫sql2000 ? 翻頁的存儲過程代碼是: CREATE PROCEDURE [SelectByPage] @pageSize int = 20, --分頁大小 @currentPage int , --第幾頁 @columns varchar(1000) = '*', --需要得到的字段 @tableName varchar(100), --需要查詢的表 @condition varchar(1000) = '', --查詢條件, 不用加where關鍵字 @ascColumn varchar(100) = '', --排序的字段名 (即 order by column asc/desc) @bitOrderType bit = 0, --排序的類型 (0為升序,1為降序) @pkColumn varchar(50) = '', --主鍵名稱 @TotalCount INT output -- 總記錄數 AS BEGIN --存儲過程開始 DECLARE @strTemp varchar(300) DECLARE @strSql varchar(5000) --該存儲過程最后執行的語句 DECLARE @strOrderType varchar(1000) --排序類型語句 (order by column asc或者order by column desc) DECLARE @CountSql NVARCHAR(4000) print '' IF @condition !='' BEGIN SET @CountSql = 'SELECT @CountOUT=COUNT(*) FROM ' + @tableName + 'WHERE ' + @condition ; -- 拼接獲取總記錄數的 @CountSql 語句 end else BEGIN SET @CountSql = 'SELECT @CountOUT=COUNT(*) FROM ' + @tableName + @condition ; -- 拼接獲取總記錄數的 @CountSql 語句 end EXEC SP_EXECUTESQL @CountSql, N'@CountOUT INT OUT', @CountOUT = @TotalCount OUT; -- 獲取總記錄數 BEGIN IF @bitOrderType = 1 --降序 BEGIN SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC' SET @strTemp = '<(SELECT min' END ELSE --升序 BEGIN SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC' SET @strTemp = '>(SELECT max' END IF @currentPage = 1 --第一頁 BEGIN IF @condition != '' SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+ ' WHERE '+@condition+@strOrderType ELSE SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+@strOrderType END ELSE -- **頁 BEGIN IF @condition !='' SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+ ' WHERE '+@condition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+ ' '+@pkColumn+' FROM '+@tableName + ' where '+@condition+@strOrderType+') AS TabTemp)'+@strOrderType ELSE SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+ ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+ ' FROM '+@tableName+@strOrderType+') AS TabTemp)'+@strOrderType END END print @strSql EXEC (@strSql) END GO ? ?
查看完整描述

2 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

這一句:

BEGIN
SET @CountSql = 'SELECT @CountOUT=COUNT(*) FROM ' + @tableName + @condition ; -- 拼接獲取總記錄數的 @CountSql 語句
end

定義的@condition 是不加Where 的,這里是不是要改為 ?

BEGIN
SET @CountSql = 'SELECT @CountOUT=COUNT(*) FROM ' + @tableName  + 'WHERE '  +@condition ; -- 拼接獲取總記錄數的 @CountSql 語句 end
查看完整回答
反對 回復 2019-01-07
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

順便說一句,你可以執行的時候 把最終要執行的語句打印出來,用print xx ?,在到查詢分析器里,具體分析,如果是like 附近的話,可能是 單引號的問題 ? 整形是不要單引號滴

查看完整回答
反對 回復 2019-01-07
  • 2 回答
  • 0 關注
  • 525 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號