SQL 带有 IN 或 LIKE 子查询的查询
SQL query with sub query with IN or LIKE
我有一个 table,其中有 50 行是复制文章。我需要选择这些名称并查询 sys.sql_modules 以查看文章名称是否存在于定义(proc 文本)中的任何位置。我已经根据此处另一个线程的类似建议尝试了以下操作,但它报告了我不期望的所有行;
SELECT Article,
CASE WHEN exists (SELECT OBJECT_NAME(object_id) AS name,
definition
FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
AND definition LIKE '%database%')
THEN 'YES else'
ELSE article
END
FROM dbo.Article
也许我需要尝试反过来查询?所以用所有存储过程的语法填充临时 table,然后根据它查询文章名称?
您的子查询未链接到查询,我认为这就是您所说的 "exist anywhere"。
在下面的代码中,它只搜索对象定义中的文章名称。使用 CHARINDEX 而不是 LIKE 来搜索定义中是否存在文章。
SELECT Article,
CASE WHEN exists (SELECT OBJECT_NAME(object_id) AS name,
definition
FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
AND CHARINDEX(article, definition) > 0)
THEN 'YES else'
ELSE article
END
FROM dbo.Article
您的文章与模块之间没有任何关系。我猜您想在 definition
中找到 Article
,这表明逻辑如下:
SELECT a.Article, m.definition
FROM dbo.Article a JOIN
sys.sql_modules m
ON OBJECTPROPERTY(m.object_id, 'IsProcedure') = 1 AND
m.definition LIKE '%database%' AND
m.definition LIKE '%' + a.Article_Name + '%'
我不知道 "database" 上的条件是否需要,但它是你原来问题的一部分。
我有一个 table,其中有 50 行是复制文章。我需要选择这些名称并查询 sys.sql_modules 以查看文章名称是否存在于定义(proc 文本)中的任何位置。我已经根据此处另一个线程的类似建议尝试了以下操作,但它报告了我不期望的所有行;
SELECT Article,
CASE WHEN exists (SELECT OBJECT_NAME(object_id) AS name,
definition
FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
AND definition LIKE '%database%')
THEN 'YES else'
ELSE article
END
FROM dbo.Article
也许我需要尝试反过来查询?所以用所有存储过程的语法填充临时 table,然后根据它查询文章名称?
您的子查询未链接到查询,我认为这就是您所说的 "exist anywhere"。
在下面的代码中,它只搜索对象定义中的文章名称。使用 CHARINDEX 而不是 LIKE 来搜索定义中是否存在文章。
SELECT Article,
CASE WHEN exists (SELECT OBJECT_NAME(object_id) AS name,
definition
FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
AND CHARINDEX(article, definition) > 0)
THEN 'YES else'
ELSE article
END
FROM dbo.Article
您的文章与模块之间没有任何关系。我猜您想在 definition
中找到 Article
,这表明逻辑如下:
SELECT a.Article, m.definition
FROM dbo.Article a JOIN
sys.sql_modules m
ON OBJECTPROPERTY(m.object_id, 'IsProcedure') = 1 AND
m.definition LIKE '%database%' AND
m.definition LIKE '%' + a.Article_Name + '%'
我不知道 "database" 上的条件是否需要,但它是你原来问题的一部分。