一次获取模式名称和表名称

时间:2015-10-01 15:16:12

标签: c# sql

我对SQL很陌生,我想出了一个我无法解决的问题,尽管我已经考虑了几个小时了。我即将提出的问题表明我在SQL服务器上的随机数据库中有一些表和一些存储过程。这些表和SP使用以下格式命名:

[schema name].[table name]

[schema name].[sp name]

我的任务是捕获这两个值,无论是表名还是SP。

我在C#上执行了下面的语句(包含4个SQL查询),然后通过SqlDataReader读取输出值,我认为我已经将模式名称与它们旁边的表/ SP名称相匹配。他们中的大多数都做了,但我需要让所有这些都正确匹配。

if (requestCode == 1)
{
    SetSpecificList("USE " + db_name + "; SELECT * FROM sys.tables", "USE " + db_name + "; SELECT * FROM INFORMATION_SCHEMA.TABLES", tablesList, requestCode);
}
else if (requestCode == 2)
{
   SetSpecificList("USE " + db_name + "; SELECT * FROM sys.procedures", "USE " + db_name + "; SELECT * FROM INFORMATION_SCHEMA.ROUTINES", SPList, requestCode);
}

我很欣赏在两个查询中组合两个SQL语句(只是一个语句)以获取表/ SP的全名而不是将其分为[schema name][table name]的建议。

1 个答案:

答案 0 :(得分:0)

由于in this article概述的原因,我总是倾向于使用update()上的系统目录视图,而且我不能100%确定为什么你在这种情况下使用两者......

无论如何,您可以使用INFORMATION_SCHEMA功能,例如

OBJECT_SCHEMA_NAME()

或者您可以加入SELECT TableName = QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) + '.' + QUOTENAME(t.name) FROM sys.tables AS t;

sys.schemas

但是,对于它的价值,您可以从同一个表中获取过程和表(以及所有其他对象):

SELECT  TableName = QUOTENAME(s.name) + '.' + QUOTENAME(t.name)
FROM    sys.tables AS t
        INNER JOIN sys.schemas AS s
            ON s.schema_id = t.schema_id;