簡體   English   中英

查找表中存在的命名列

[英]Finding a Named column present in a table

我瘋狂地找到一個SQL或T-SQL查詢來獲取數據庫/模式中具有給定名稱列的所有表的名稱。

請問有人幫我嗎?

提前致謝 :)

這將找到您在當前/活動數據庫中的列。 如果您在不同的數據庫中,只需在INFORMATION_SCHEMA.COLUMNS加上數據庫名稱(例如dbname.INFORMATION_SCHEMA.COLUMNS

DECLARE @Schema varchar(max)
DECLARE @Column varchar(max)

SET @Schema = NULL
SET @Column = 'primary_id'

SELECT DISTINCT
    TABLE_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @Column
    AND
    (
        @Schema IS NULL
            OR TABLE_SCHEMA = @Schema
    )

這將在SQL Server中工作,並且也應該在其他DBMS中工作,因為INFORMATION_SCHEMA有些標准化(例如,它在MySql中: http//dev.mysql.com/doc/refman/5.0/en/columns-table.html

您可以使用INFORMATION_SCHEMA.COLUMNS系統視圖:

SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'Name of column';

此查詢將為您提供包含名為foo的列的所有表

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'foo'

請注意,雖然對於SQL * Server(以及mySQL和postGres)是正確的,但Oracle的答案卻不同,因為它們不支持信息模式(即ANSI SQL-92,所以他們有足夠的時間這樣做)。

在Oracle上你會使用

SELECT table_name, column_name
FROM ALL_TAB_COLUMNS
WHERE column_name = :column_name

或者您可以創建一個模式和視圖來完成缺少的information_schema.columns的工作。

select TABLE_NAME from Your_Database_Name.INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME like '%ColumnName%' group by TABLE_NAME

在sybase;

declare @column varchar(30)
select @column = 'column_name'
select object_name(id), @column from DB_NAME..syscolumns where name = @column

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM