【发布时间】:2021-12-09 09:27:06
【问题描述】:
我知道这个查询可以从 SQL Server 存储过程中提取引用的表。
例如,如果我有这个存储过程:
UPDATE tbl1
SET symbol = tbl2.symbol, symbol2 = tbl2.symbol2
FROM tbl1
JOIN tbl2 ON tbl1.PK = tbl2.PK
这个查询:
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
还有这个:
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE '%<table name>%'
两者都返回 tbl1 和 tbl2 作为响应。
我的问题是:tb11 是 SQL 显示的 ReadWrite,tbl2 是 ReadOnly。
如何更新我的查询以进行区分?
所以我的输出应该是:
Response
========
tbl1, ReadWrite
tbl2, ReadOnly
谢谢!
【问题讨论】:
-
“读/写”和“只读”是什么意思 - 您只是在“更新”一个表,但 SQL Server 不维护那种元信息。您可以查找查询文本为
like '%update tbl1%'并显示您想要指示它插入的任何内容,但这将依赖于单词 update 和正在使用的 tablename,如果它是更新和一个别名呢? -
嗨,Stu,感谢您的评论。更新查询将 tb1 连接到 tb2,这意味着正在读取两个表以设置更新,然后更新 tbl1。这意味着 tbl1 被读取然后写入,而 tbl2 不是。使用字符串上下文可能会给我带来不同的结果,因为这是我正在询问的多种 sql 类型之一。
-
这意味着 tbl1 是目标,我正在尝试区分
标签: sql sql-server tsql stored-procedures