奇怪的情况:我正在尝试从我的代码中删除一些硬编码。有一种情况我有一个字段,让我们说“CityID”,并使用这些信息,我想找出哪个表包含一个名为CityID的主键。
从逻辑上讲,你可能会说它可能是一个名为“城市”的表,但它不是......那个表叫做“城市”。数据库命名中还有一些其他的不一致因此我永远无法确定是否删除字符串“ID”并找出复数就足够了。
注意:一旦我发现CityID引用了一个名为Cities的表,我将执行一个连接,以便动态地用城市名替换CityID。如果someonw还能告诉我如何在表中给出其名称的第一个varchar字段,我将不胜感激。
答案 0 :(得分:4)
SELECT name FROM sysobjects
WHERE id IN ( SELECT id FROM syscolumns WHERE name = 'THE_COLUMN_NAME' )
从指定的表中获取列信息:
SELECT column_name, data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'myTable'
答案 1 :(得分:3)
从information_schema.columns中选择table_name,其中column_name ='CityID'
答案 2 :(得分:2)
您可以使用INFORMATION_SCHEMA表来读取有关数据库的元数据。
SELECT
TABLE_NAME
FROM
[db].[INFORMATION_SCHEMA].[COLUMNS]
WHERE
COLUMN_NAME='CityID';
有关INFORMAITON_SCHEMA中的内容的入门读物,请参阅INFORMATION_SCHEMA, a map to your database
答案 3 :(得分:1)
您所寻求的信息均可在information schema views中找到。请注意,您会发现许多消息来源告诉您如何直接查询这些视图所依据的底层系统表 - 我必须承认,我只是为了快速找到某些内容而做同样的事情 - 但应用程序的推荐方法是去通过这些观点。
例如,要找到您的CityID
列:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CityID'
要查找表格中的第一个varchar
字段:
SELECT TOP 1 * FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME = 'TableName'
AND DATA_TYPE = 'varchar' -- This is off the top of my head!
ORDER BY ORDINAL_POSITION
答案 4 :(得分:0)
据您所知,您想查找包含主键中CITYID列的表
您可以使用SQL教程中所示的 sysindexes 和sysindexkeys之类的SQL Server系统视图来对query database table primary keys包括形成的composite primary keys进行
SELECT
TBL.name as TableName
FROM sysobjects as PK
INNER JOIN sys.objects as TBL
on TBL.object_id = PK.parent_obj
INNER JOIN sysindexes as IND
on IND.name = PK.name AND
IND.id = TBL.object_id
INNER JOIN SysIndexKeys as KEYS
on KEYS.id = IND.id AND
KEYS.indid = IND.indid
INNER JOIN syscolumns as COL
on COL.id = KEYS.id AND
COL.colid = KEYS.colid
WHERE
PK.xtype = 'PK' AND
COL.name = 'CityID'