我有一个包含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
也许我需要尝试以相反的方式查询它?那么使用所有存储过程的语法填充临时表,然后查询文章名称?
答案 0 :(得分:1)
您与文章和模块之间没有任何关系。我猜你想在Article
中找到definition
,这表明这样的逻辑:
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 + '%'
我不知道是否需要“数据库”的条件,但这是原始问题的一部分。
答案 1 :(得分:0)
你的子查询不是'链接到查询,我认为你的意思是"存在于任何地方"。
在下面的代码中,它仅搜索对象定义中的文章名称。使用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