2011-03-16 75 views
0

我有一组表的位置与他们的名字,如位置和位置的区域。我想编写一个quesry,首先从我的数据库中检索这些表名,然后获取它们的主键。我怎么做? [a_rahnema]。[dbo]是我的数据库的名称。查询检索数据库中的特定表的名称,并检索该表的主键

+0

'dbo'是数据库中默认模式的名称。它不是数据库名称的一部分。 – 2011-03-16 15:25:55

+0

你是对的!我的错 – aaaaaaaaaaaa 2011-03-16 15:27:02

回答

0

该查询会给你一个宽表包括主键内的表名,主键名,列,对于具有“位置”的所有表作为其名称的一部分:

select * from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
     inner join 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu 
     on 
      tc.CONSTRAINT_CATALOG = kcu.CONSTRAINT_CATALOG and 
      tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA and 
      tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME 
where 
    tc.CONSTRAINT_TYPE='PRIMARY KEY' and 
    tc.TABLE_NAME like '%Location%' 
order by 
    tc.CONSTRAINT_CATALOG, 
    tc.CONSTRAINT_SCHEMA, 
    tc.CONSTRAINT_NAME, 
    kcu.ORDINAL_POSITION 

您可能想要为实际查询限制更多列。


在编写SQL,我们鼓励你觉得在结果集作为一个整体而言,在告诉引擎你想,不怎么办呢什么方面。所以你通常不应该考虑“首先做这件事,然后我做下一件事,然后对于每个结果,我想做其他事情”。