Fulltext Search Stored Procedure.
CREATE PROCEDURE freetext_rank_proc
(
@select_list nvarchar(1000), -- Desire field e.g. "ID,sSubject,KEY_TBL.RANK"
@from_table nvarchar(517), -- Table name e.g. "tbl_Content"
@freetext_column sysname, -- Column name e.g. "sBody"
@freetext_search nvarchar(1000), -- Search text
@additional_predicates nvarchar(500) = '', -- Additional if any e.g. "KEY_TBL.RANK >= 10"
@order_by_list nvarchar(500) = '' -- Orderby List e.g. "KEY_TBL.RANK DESC"
)
AS
BEGIN
DECLARE @table_id integer,
@unique_key_col_name sysname,
@add_pred_var nvarchar(510),
@order_by_var nvarchar(510)
-- Get the name of the unique key column for this table.
SET @table_id = Object_Id(@from_table)
SET @unique_key_col_name =
Col_Name( @table_id, ObjectProperty(@table_id, 'TableFullTextKeyColumn') )
-- If there is an additional_predicate, put AND() around it.
IF @additional_predicates <> ''
SET @add_pred_var = 'AND (' + @additional_predicates + ')'
ELSE
SET @add_pred_var = ''
-- Insert ORDER BY, if needed.
IF @order_by_list <> ''
SET @order_by_var = 'ORDER BY ' + @order_by_list
ELSE
SET @order_by_var = ''
-- Execute the SELECT statement.
--print 'SELECT ' + @select_list + ' FROM ' + @from_table + ' AS FT_TBL, FreetextTable(' + @from_table + ',' + @freetext_column + ',''' + @freetext_search + ''') AS KEY_TBL ' + 'WHERE FT_TBL.' + @unique_key_col_name + ' = KEY_TBL.[KEY] ' + @add_pred_var + ' ' + @order_by_var
EXECUTE ( 'SELECT '
+ @select_list
+ ' FROM '
+ @from_table
+ ' AS FT_TBL, FreetextTable('
+ @from_table
+ ','
+ @freetext_column
+ ','''
+ @freetext_search
+ ''') AS KEY_TBL '
+ 'WHERE FT_TBL.'
+ @unique_key_col_name
+ ' = KEY_TBL.[KEY] '
+ @add_pred_var
+ ' '
+ @order_by_var
)
END
GO
Cheer!
Maulik Pandya
|