靜態SQL語句應用心得。本站提示廣大學習愛好者:(靜態SQL語句應用心得)文章只能為提供參考,不一定能成為您想要的結果。以下是靜態SQL語句應用心得正文
在我們的項目中常常須要用到分面功效,而我之前呢用的辦法如今看起來都是那麽的愚笨,其時是如許做的,每當要停止數據分頁時就專們針對誰人表做分頁,年夜家別笑,之前確切好笨。呵呵,固然其時也有一個設法主意就是願望可以或許傳入一張表出來停止操作,但那樣的話編譯是通不外的,由於FROM前面操作的是表變量,而不克不及是我們自界說的變量,所以其時沒有深窮究,如今為其時不深刻進修而BS一下。
靜態SQL須要預備以下內容:
1、@SQL 拼接後的SQL語句,可所以你隨意率性須要的SQL語句如:SET @SQL='SELECT * FROM table WHERE ID=@id' 留意此處的@SQL必需且只能是NTEXT、NVARCHAR、NCHAR類型,假如是其它類型的話其它處所明明沒有成績卻會報 "進程須要類型為 'ntext/nchar/nvarchar' 的參數"這個毛病。同時,假如這裡須要傳入表稱號的話則應如許寫:SET @SQL='SELECT * FROM '+@table+'WHERE ID=@id' ,由於下面傳入的值是文本類型故會報錯。
2、@parameters 所拼接的SQL語句外面的參數,按下面的話這裡應當是:SET @parameters='@id INT' 同時這個參數的類型也必需且只能是NTEXT、NVARCHAR、NCHAR類型
3、挪用:sp_executesql param1(,param2) 個中param1普通我們作為是@SQL,前面的參數則是我們在@sql中的參數了,但這裡要留意的是傳參的時刻必需是對應的:
DECLARE @InputId INT ;
SET @InputId=1;
param2為:@id=@InputId;
以下是寫的一個簡略的通用分頁,有須要可以自行修正:
ALTER PROCEDURE sp_pager
(
@TableName nvarchar(50), -- 表名
@ReturnFields nvarchar(200) = '*', -- 須要前往的列
@PageSize int = 50, -- 每頁記載數
@PageIndex int = 1 -- 以後頁碼
)
AS
DECLARE @SQL NVARCHAR(1000)
DECLARE @paramters NVARCHAR(200)
BEGIN
SET NOCOUNT ON
SET @SQL='SELECT '+@ReturnFields+' FROM '+@TableName+' WHERE ID>(SELECT TOP 1 ID FROM (SELECT TOP '+CAST(@PageSize*@PageIndex AS VARCHAR)+' ID FROM '+@TableName+ ' ORDER BY ID )AS A ORDER BY ID DESC)'
PRINT @SQL
EXECUTE sp_executesql @SQL,@paramters,@columns=@ReturnFields
END