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
文章標籤
全站熱搜
