Tsql 我的存储过程文本搜索有缺陷

Tsql 我的存储过程文本搜索有缺陷,tsql,Tsql,我被卡住了——我有一个很好的小文本搜索工具,我已经组装好了 我意识到我需要计算存储过程存储在其中的单个文本块中的lnie,所以我想我已经找到了一种方法 但它并不是在存储过程中获取搜索词的每个实例——我认为这是同样的原因。。。搜索词在文本边界上拆分 我已经研究了如何更改我的查询,现在我一片空白。改变它所涉及的技能是我无法理解的 --Text searcher. DECLARE @searchString VARCHAR(255), @doesNotContain VARCHAR

我被卡住了——我有一个很好的小文本搜索工具,我已经组装好了

我意识到我需要计算存储过程存储在其中的单个文本块中的lnie,所以我想我已经找到了一种方法

但它并不是在存储过程中获取搜索词的每个实例——我认为这是同样的原因。。。搜索词在文本边界上拆分

我已经研究了如何更改我的查询,现在我一片空白。改变它所涉及的技能是我无法理解的

--Text searcher.
DECLARE @searchString VARCHAR(255),  
        @doesNotContain VARCHAR(255), 
        @previewLength INTEGER, 
        @findStoredProcedures VARCHAR(3), 
        @findTableFunction VARCHAR(3), 
        @findScalerFunction VARCHAR(3), 
        @findTrigger VARCHAR(3), 
        @findView VARCHAR(3), 
        @findUserTable VARCHAR(3), 
        @onlyInName VARCHAR(3)

--------------------------------------------------------    
-- Search criteria:

SET @searchString = 'My search Term'

SET @findStoredProcedures     = 'yes'
SET @findTableFunction        = 'yes'
SET @findScalerFunction       = 'yes'
SET @findUserTable            = 'yes'
SET @findTrigger              = 'yes'
SET @findView                 = 'yes'

SET @doesNotContain = ''
SET @previewLength = 30

--------------------------------------------------------    

SELECT DISTINCT
    ISNULL(
        (SELECT REPLACE(CONVERT(VARCHAR(20), (CAST(SUM(LEN(SC2.text)) AS MONEY)), 1), '.00', '')
        FROM syscomments SC2 WHERE SC2.id = SO.id GROUP BY SC2.id)
        , '')
    AS [Object length]
    ,
    SO.name AS [Object name]
    ,
    CASE
            WHEN SO.xtype = 'P' THEN 'Stored Procedure'
            WHEN SO.xtype = 'TF' THEN 'Table Function'
            WHEN SO.xtype = 'FN' THEN 'Scaler Function'
            WHEN SO.xtype = 'U' THEN 'User Table'
            WHEN SO.xtype = 'TR' THEN 'Trigger'
            WHEN SO.xtype = 'V' THEN 'View'
    END 
    + ISNULL((SELECT ' - ' + name FROM sysobjects WHERE id = SO.parent_obj), '')
    AS [Object type]
    ,
    ISNULL(SUBSTRING(SC.text, CHARINDEX(@searchString, SC.text) - @previewLength, @previewLength) + 
            SUBSTRING(SC.text, CHARINDEX(@searchString, SC.text), @previewLength + LEN(@searchString))
    , '') AS [Preview of code]
    ,
    (SELECT 
        COALESCE(
            SUM(LEN(SC3.text) - LEN(REPLACE(SC3.text, CHAR(13), '')) + 1) + 4 
            +
            (
            SELECT 
                (LEN(LEFT(SC4.text, CHARINDEX(@searchString, SC4.text))) -
                LEN(REPLACE(LEFT(SC4.text, CHARINDEX(@searchString, SC4.text)), CHAR(13), '')))
            FROM syscomments SC4
            WHERE
                SC4.id = SO.id
                AND SC4.colid = SC.colid
            )
        ,
            SUM(LEN(SC3.text) - LEN(REPLACE(SC3.text, CHAR(13), '')) + 1) + 4 
        ,
            (
            SELECT 
                (LEN(LEFT(SC4.text, CHARINDEX(@searchString, SC4.text))) -
                LEN(REPLACE(LEFT(SC4.text, CHARINDEX(@searchString, SC4.text)), CHAR(13), '')) + 1)
            FROM syscomments SC4
            WHERE
                SC4.id = SO.id
                AND SC4.colid = SC.colid
            )
        )
    FROM syscomments SC3
    WHERE
        SC3.id = SO.id
        AND SC3.colid < SC.colid
    )
     AS [Line number]

FROM sysobjects SO

LEFT JOIN syscomments SC
ON SO.id = SC.id

WHERE
    (
        (SO.type = 'P' AND @findStoredProcedures = 'yes')
        OR
        (SO.type = 'TF' AND @findTableFunction = 'yes')
        OR
        (SO.type = 'FN' AND @findScalerFunction = 'yes')
        OR
        (SO.type = 'TR' AND @findTrigger = 'yes')
        OR
        (SO.type = 'U' AND @findUserTable = 'yes')
        OR
        (SO.type = 'V' AND @findView = 'yes')
    )
    AND SO.category = 0
    AND
    (
        (CHARINDEX(@searchString, SC.text) > 0
        AND CHARINDEX(@doesNotContain, SC.text) = 0)
        OR
        (SO.type = 'U'
        AND CHARINDEX(@searchString, SO.name) > 0
        AND CHARINDEX(@doesNotContain, SO.name) = 0)
    )
ORDER BY
    [Object type], [Object name], [Line number]

您的where子句似乎有问题,这里有一点

(
    (CHARINDEX(@searchString, SC.text) > 0
    AND CHARINDEX(@doesNotContain, SC.text) = 0)
    --OR
    --(SO.type = 'U'
    --AND CHARINDEX(@searchString, SO.name) > 0
    --AND CHARINDEX(@doesNotContain, SO.name) = 0)