Как мне нужно найти в таблице точное совпадение - PullRequest
0 голосов
/ 12 октября 2018

У меня есть таблица типа SYS.OBJECTS в моей базе данных (то есть Dbo.tables), где у меня есть такие данные

Пример данных

Tbl_name    Col_names   Query
H_Website   Website_ID  SELECT W.WebSiteID, C.Channel_ID FROM   Enroll W LEFT JOIN CHANNEL_TYPE C ON W.ChannelNAME = C.ChannelNAME

Если я выполню запрос, который есть в столбце запроса, я получу идентификатор веб-сайта из таблицы регистрации.Таким образом, в таблице регистрации есть столбец идентификатора сайтаКак можно выполнить поиск идентификатора веб-сайта в столбце «Запрос» и получить имя таблицы (таблица регистрации с именем столбца идентификатора веб-сайта)

Вывод, необходимый для получения этого

Tbl_name   Col_names   Source_Tbl
H_Website  Website_ID   Enroll

Выход, который я должен получить, и я не могу двигаться вперед в этом.Просвети меня в этом.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Это может быть боль в шее, поскольку SQL не имеет полной поддержки регулярных выражений (выражений).Таким образом, поиск внутри строки с такой сложностью будет очень сложным.Причина, по которой я вижу это сложным, заключается в том, что вы предоставляете только простой запрос.Пока есть оконные запросы, CTE, циклы ... и т. Д.Итак, вам нужно придумать другой и самый простой способ сделать это.В противном случае это будет долгая поездка!

вот пример, который будет применен к вашему примеру (работает с простыми запросами, в которых есть только один FROM):

DECLARE     
    @t  TABLE(Tbl_name VARCHAR(250), Col_names VARCHAR(250), Query VARCHAR(MAX) )
INSERT INTO @t VALUES
('H_Website','Website_ID','SELECT W.WebSiteID, C.Channel_ID FROM Enroll W LEFT JOIN CHANNEL_TYPE C ON W.ChannelNAME = C.ChannelNAME')



SELECT  
    Tbl_name
,   Col_names
,   RTRIM(LTRIM(LEFT(SecondPart, CHARINDEX(' ', SecondPart)))) Source_Tbl
FROM (
    SELECT *,
        LTRIM(SUBSTRING(FirstPart, CHARINDEX(' ', FirstPart) , LEN(FirstPart) )) SecondPart
    FROM (
        SELECT 
            Tbl_name
        ,   Col_names
        ,   LTRIM(SUBSTRING(Query,CHARINDEX(' FROM ',Query), 50 )) FirstPart
        FROM @t
    ) D
) C
0 голосов
/ 12 октября 2018
use test_db

SELECT      t.name AS 'TableName'
            ,c.name  AS 'ColumnName'

FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id

where   t.name like '%tbl_name%'

ORDER BY    TableName
            ,ColumnName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...