在一个Query或SQL命令中查找所有表的名称

时间:2018-04-03 19:10:59

标签: c# sql sql-server sql-server-2016

我想在我的T-SQL命令中找到所有表的名称。我的命令可以是选择,更新,删除,插入,合并或截断。

我可以使用C#。但我真的不知道怎么找到它们因为有很多可能性。

例如:我可以选择以下选项:

SELECT
    <Schemaname>.<TableName1>.Field1,
    <TableName2>.Field2,
    Field3,
    Field4 = ( Select .. FROM <TableName6> WHERE ... )
FROM 
    <TableName1> , <TableName2>
INNER JOIN 
    <TableName3> AS TableName4 ON .....
WHERE ....
    <TableName2>.Field3 in ( SELECT ... FROM TableName5 )

我正在寻找的列表应该有这些表的名称

TableName1,TableName2,TableName3,TableName5,TableName6

在这种情况下,TableName4是别名,它不会在数据库中显示表的真实名称。

我有一个命令,我使用了一个带有模式名称的表名和另一个没有模式名称的表,而且我还有一些表的别名,别名可以像我真正在我的表名数据库中。

2 个答案:

答案 0 :(得分:1)

纯粹使用t-sql这样做非常困难。难以理解我的意思几乎是不可能的。获得一个甚至接近准确的t-sql脚本需要花费数天和数天的时间。有太多的可能性。除非您要查找的表名是如此独特,否则只需在代码中搜索该表名即可。其他任何东西只会让你接近。祝你好运!!!

这是不可能100%正确和详尽的。如果你有一个功能怎么办?那个函数从视图中提取数据?而这种观点来自其他表?

即使在上面的例子中,也有很多可能性。最好将其创建为存储过程,然后查看 sys.depends

但即使这样也不详尽,因为它只会像这个查询一样深,而不是被引用的其他对象依赖

答案 1 :(得分:0)

不太确定我真的明白你想要达到的目标,但这是我的2美分:

假设您可以使用某些代码从许多SSIS包中提取SQL命令(如果您需要该代码,则可以提供帮助)。 基于此,我会

  • 使用所有数据库对象的引用列表,并通过SQLCommand(从SSIS包中提取)搜索每个对象
  • 构建找到的所有名称字符串列表(对象列表, 可能是表,视图,函数,存储过程)
  • 然后使用该列表在数据库中查找依赖对象(如果您 需要深入了解)

    选择DISTINCT s1.class_desc,s1.object_id,referenced_major_id,OBJECT_NAME(s1.object_id)AS ObjName,OBJECT_NAME(s2.object_id)AS ObjName2 来自sys.sql_dependencies s1 INNER JOIN sys.objects s2 ON s2.object_id = s1.referenced_major_id

  • 将所有内容放入结果表

  • 转到下一个SSIS包

这会对你有用吗?