【问题标题】:How to get only Table Name using Sp_depends? [duplicate]如何使用 Sp_depends 仅获取表名? [复制]
【发布时间】:2015-06-09 12:16:42
【问题描述】:

如何获取sp_depends 在存储过程中单独使用的表名。 例如

EXEC sp_depends Samplesp1

它给出了samplesp1 中使用的表名及其列名。但我只需要表名。

【问题讨论】:

  • 为什么不将结果插入临时表并只使用表名

标签: sql sql-server tsql


【解决方案1】:

最简单的方法是创建一个临时表,如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。调查答案也会给你一些更好的选择。

【讨论】:

  • OPENQUERY 解决方案似乎不适用于 Azure SQL (12);此版本的 SQL Server 不支持“OPENQUERY”行集提供程序。
【解决方案2】:

您可以将结果保存到临时表中

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 解决方案是否修复它
猜你喜欢
  • 2019-09-28
  • 2011-12-31
  • 2016-04-06
  • 2012-01-05
  • 2014-01-03
  • 2011-02-03
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多