在C#

时间:2018-01-02 17:31:06

标签: c# sql .net sql-server

我有一个包含SQL查询的字符串。以及包含查询中找到的列之一的名称的字符串。如何找到从中获取列的表?

例如:

string qry = "select [firstName],[result] from [dbo].[patients],[dbo].results]";
string column = "firstName";

我想获得[dbo].[patients]

当然,这种使用会使复杂的查询和程序也变得更加复杂。

2 个答案:

答案 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}}