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





arrow
arrow
    全站熱搜
    創作者介紹
    創作者 amychang2014 的頭像
    amychang2014

    工作需要筆記

    amychang2014 發表在 痞客邦 留言(0) 人氣()