close
ALTER PROCEDURE [dbo].[一般搜尋EX] @函式名稱 NVARCHAR(255) = '' ,@程式語言 NVARCHAR(255) = '' ,@起始行 INT = 0 ,@結束行 INT = 0 AS BEGIN SET NOCOUNT ON ; DECLARE @語法 NVARCHAR(MAX) = '' ,@語法2 NVARCHAR(MAX) = '' ,@條件 NVARCHAR(1024) = '' ,@參數 NVARCHAR(1024) = '' ,@顯示欄位 NVARCHAR(512) = '' SET @顯示欄位 =N'SELECT *' SET @語法 = N' FROM (SELECT ROW_NUMBER() OVER (ORDER BY 內文流水號 DESC) ROWID,X2.*,X1.目錄名稱,X3.程式語言 FROM [目錄](NOLOCK) X1 LEFT JOIN [內文](NOLOCK) X2 ON X1.目錄流水號=X2.來源目錄 LEFT JOIN [程式語言](NOLOCK) X3 ON X2.程式語言id = X3.id WHERE (1=1){0} ) A {1}'; SET @語法2 = @語法; SET @語法 = @顯示欄位 + @語法; IF @函式名稱 <> '' SET @條件 += N' OR (X2.函式名稱 LIKE ''%'+@函式名稱+'%'')'; IF @程式語言 <> '' SET @條件 += N' OR (X3.程式語言 LIKE ''%'+@程式語言+'%'')'; SET @參數 = N'@函式名稱 NVARCHAR(255),@程式語言 NVARCHAR(255),@起始行 INT,@結束行 INT'; SET @語法 = REPLACE(@語法,'{0}',@條件) SET @語法2 = REPLACE(@語法2,'{0}',@條件) SET @語法 = REPLACE(@語法,'(1=1) OR','(1=1) AND') SET @語法2 = REPLACE(@語法2,'(1=1) OR','(1=1) AND') -- 分頁 IF @起始行 > @結束行 BEGIN SET @起始行 = 0 SET @結束行 = 0 END IF @起始行 <> 0 AND @結束行 <> 0 BEGIN SET @語法 = REPLACE(@語法,'{1}','WHERE ROWID BETWEEN @起始行 AND @結束行') END ELSE BEGIN SET @語法 = REPLACE(@語法,'{1}','') END PRINT @語法 EXEC Sp_ExecuteSQL @語法,@參數 ,@函式名稱 = @函式名稱 ,@程式語言 = @程式語言 ,@起始行 = @起始行 ,@結束行 = @結束行 -- 總筆數 SET @顯示欄位 = N'SELECT ISNULL(COUNT(*),0) AS 總數量' SET @語法2 = @顯示欄位 + @語法2 SET @語法2 = REPLACE(@語法2,'{1}','') PRINT '' PRINT @語法2 EXEC Sp_ExecuteSQL @語法2,@參數 ,@函式名稱 = @函式名稱 ,@程式語言 = @程式語言 ,@起始行 = @起始行 ,@結束行 = @結束行 END
全站熱搜