我想在我的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是别名,它不会在数据库中显示表的真实名称。
我有一个命令,我使用了一个带有模式名称的表名和另一个没有模式名称的表,而且我还有一些表的别名,别名可以像我真正在我的表名数据库中。
答案 0 :(得分:1)
纯粹使用t-sql这样做非常困难。难以理解我的意思几乎是不可能的。获得一个甚至接近准确的t-sql脚本需要花费数天和数天的时间。有太多的可能性。除非您要查找的表名是如此独特,否则只需在代码中搜索该表名即可。其他任何东西只会让你接近。祝你好运!!!
这是不可能100%正确和详尽的。如果你有一个功能怎么办?那个函数从视图中提取数据?而这种观点来自其他表?
即使在上面的例子中,也有很多可能性。最好将其创建为存储过程,然后查看 sys.depends 。
但即使这样也不详尽,因为它只会像这个查询一样深,而不是被引用的其他对象依赖
答案 1 :(得分:0)
不太确定我真的明白你想要达到的目标,但这是我的2美分:
假设您可以使用某些代码从许多SSIS包中提取SQL命令(如果您需要该代码,则可以提供帮助)。 基于此,我会
然后使用该列表在数据库中查找依赖对象(如果您 需要深入了解)
选择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
将所有内容放入结果表
这会对你有用吗?
乙