我有一个包含SQL查询的字符串。以及包含查询中找到的列之一的名称的字符串。如何找到从中获取列的表?
例如:
string qry = "select [firstName],[result] from [dbo].[patients],[dbo].results]";
string column = "firstName";
我想获得[dbo].[patients]
。
当然,这种使用会使复杂的查询和程序也变得更加复杂。
答案 0 :(得分:5)
在Sql Server中,两个表都可以具有匹配的列名,并且两个表中的字段可以返回到具有同名的查询中。此外,您可以在查询中包含计算列,其中结果集包含来自单个列中两个表的信息。还有其他情况可能会使事情变得混乱。
因此,您不一定只能从列名中获得足够的信息,以确定查询中哪个表来源该列。
答案 1 :(得分:-1)
您可以使用sys.tables
找出数据库中所有列的名称。要找出所在的表格和架构,您需要加入sys.schemas
和[firstName]
。因此,使用列名SELECT QUOTENAME(s.[name]) + '.' + QUOTENAME(t.[name]) AS Object
FROM sys.columns c
JOIN sys.tables t on c.object_id = t.object_id
JOIN sys.schemas s on t.schema_id = s.schema_id
WHERE c.[name] = 'firstName'
AND t.[name] IN ('patients','results')
and s.name = 'dbo';
:
{{1}}