【发布时间】:2015-06-09 12:16:42
【问题描述】:
如何获取sp_depends 在存储过程中单独使用的表名。
例如
EXEC sp_depends Samplesp1
它给出了samplesp1 中使用的表名及其列名。但我只需要表名。
【问题讨论】:
-
为什么不将结果插入临时表并只使用表名
标签: sql sql-server tsql
如何获取sp_depends 在存储过程中单独使用的表名。
例如
EXEC sp_depends Samplesp1
它给出了samplesp1 中使用的表名及其列名。但我只需要表名。
【问题讨论】:
标签: sql sql-server tsql
最简单的方法是创建一个临时表,如this答案中提到的sqluser。
CREATE TABLE #temp
(NAME VARCHAR(250)
, [type] VARCHAR(250)
, updated CHAR(2)
, selected CHAR(3)
, [column] VARCHAR(250))
-- insert the data from procedure's rresult into temporary table
INSERT #temp
EXEC sp_depends @objname = N'Samplesp1'
SELECT NAME
FROM #temp t
--Filter condition
WHERE t.type = 'user table'
drop TABLE #temp
这篇文章-How to Share Data between Stored Procedures 展示了适合您的场景的各种其他方法。
在我个人最喜欢的所有选项中,使用OPENQUERY:
SELECT * FROM
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')
WHERE somefield = anyvalue
SO 中有一个关于该场景的问题已经得到很好的回答 - SQL Server - SELECT FROM stored procedure。调查答案也会给你一些更好的选择。
【讨论】:
您可以将结果保存到临时表中
CREATE TABLE #tmp
(
name VARCHAR(250)
,[type] VARCHAR(250)
,updated CHAR(2)
,selected CHAR(3)
,[column] VARCHAR(250)
)
INSERT #tmp
EXEC sp_depends @objname = N'yoursp'
SELECT name FROM #tmp
【讨论】:
sp_depends 有两个记录集,因此此解决方案导致 Msg 213, Level 16, State 7, Procedure sp_depends, Line 68 [Batch Start Line 0] 列名或提供的值的数量与表定义不匹配。。不确定这是否是此 proc 的新功能,也不确定 openquery 解决方案是否修复它