查找包含指定名称列的所有表 - MS SQL Server

Find all tables containing column with specified name - MS SQL Server

提问人:gruber 提问时间:1/31/2011 最后编辑:Rand Randomgruber 更新时间:10/16/2023 访问量:3830211

问:

想改进这篇文章吗?提供此问题的详细答案,包括引文和解释为什么您的答案是正确的。没有足够细节的答案可能会被编辑或删除。

是否可以查询包含列的表名

LIKE '%myName%'

?

sql-server t-sql 系统表

评论

19赞 Vbp 11/7/2014
有一个了不起的sql server插件,可以搜索所有对象类型。SQL 搜索 red-gate.com/products/sql-development/sql-search
2赞 iDevlop 6/27/2016
@vbp:sql-search确实很棒,但是像许多工具一样,它不适用于SQL Server 2000(是的,我目前坚持使用:-/ )
4赞 Junchen Liu 12/14/2016
@vbp SSMS 的 ApexSQL 搜索提供了更多功能

答:

132赞 cichy 1/31/2011 #1

这应该有效:

SELECT name 
FROM sysobjects 
WHERE id IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%column_name%' )

评论

10赞 marc_s 1/31/2011
我会用代替(从 SQL Server 2005 开始已弃用)sys.tablessysobjects
6赞 JSON 7/6/2016
列名“id”无效
0赞 HOÀNG LONG 1/27/2021
JSON格式。我在 SQL Server 2019 中正常工作
2642赞 AdaTheDev 1/31/2011 #2

搜索表:

SELECT      c.name  AS 'ColumnName'
            ,(SCHEMA_NAME(t.schema_id) + '.' + t.name) AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

搜索表和视图:

SELECT      COLUMN_NAME AS 'ColumnName'
            ,TABLE_NAME AS  'TableName'
FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

评论

26赞 Tomasito 3/19/2014
SQL Server 中包含的@Revious视图都符合 INFORMATION_SCHEMA 的 ISO 标准定义,Microsoft特定于 SQL Server。INFORMATION_SCHEMAsys.columnssys.tables
14赞 Bernhard Hofmann 10/22/2014
包含在您的选择列表中可能会有所帮助。仍然是 +1,因为这是一个很好的答案。TABLE_SCHEMA
2赞 Ryan Gates 5/23/2016
您能否将两者之间差异的解释添加到@user3185569评论的答案中?
2赞 iDevlop 6/27/2016
第二个也适用于 SQL Server 2000,如果您碰巧必须使用它
7赞 Skorunka František 10/6/2016
还获取表模式: SELECT c.name AS ColName, t.name AS TableName, SCHEMA_NAME(t.schema_id) AS SchemaName ....
32赞 Neil Knight 1/31/2011 #3
SELECT COLUMN_NAME, TABLE_NAME
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
533赞 Khwaza Bandenawaz 10/18/2011 #4

我们还可以使用以下语法:-

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME like '%clientid%' 
order by TABLE_NAME

评论

19赞 Aubrey Robertson 11/11/2016
这对我有用,而最高答案没有(我正在使用 MariaDB)。
10赞 Davos 5/24/2018
毫不奇怪,它适用于所有这些不同的数据库,因为它是 ANSI 标准的一部分INFORMATION_SCHEMA
0赞 Robert Sherman 12/3/2020
最好将INFORMATION_SCHEMA用于这些任务,我不建议出于任何原因触摸 sys 表。
1赞 Captain Jack Sparrow 5/22/2021
这在旧版本的 SQL Server 上对我有用。+1
0赞 Martijn 5/2/2022
也适用于最新的 SQL Server 版本。
29赞 shadab shah 7/5/2012 #5
USE AdventureWorks

GO

SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name,
 c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%EmployeeID%'
ORDER BY schema_name, table_name; 

它来自 Pinal Sir 博客

24赞 Shaikh Farooque 1/21/2013 #6

以下查询将为您提供字段名称为“%myName”的数据库的确切表名。

SELECT distinct(TABLE_NAME)
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
119赞 Francis Rodgers 3/27/2013 #7
select  
        s.[name]            'Schema',
        t.[name]            'Table',
        c.[name]            'Column',
        d.[name]            'Data Type',
        c.[max_length]      'Length',
        d.[max_length]      'Max Length',
        d.[precision]       'Precision',
        c.[is_identity]     'Is Id',
        c.[is_nullable]     'Is Nullable',
        c.[is_computed]     'Is Computed',
        d.[is_user_defined] 'Is UserDefined',
        t.[modify_date]     'Date Modified',
        t.[create_date]     'Date created'
from        sys.schemas s
inner join  sys.tables  t
on s.schema_id = t.schema_id
inner join  sys.columns c
on t.object_id = c.object_id
inner join  sys.types   d
on c.user_type_id = d.user_type_id
where c.name like '%ColumnName%'

这里将为您提供一些有关架构、表和列的额外信息,您可以选择或可能不会选择在 where 子句中使用额外的条件进行筛选。例如,如果您只想查看必须具有值的字段,则添加

and c.is_nullable = 0

您可以添加其他条件,我还以这种垂直方式添加了 select 子句中的列,因此可以根据需要轻松重新排序、删除、重命名或添加其他列。或者,您可以使用 T.Name 仅搜索表。它非常可定制。

享受。

评论

4赞 user1566694 11/21/2017
d.[max_length]似乎有点没用。c.[max_length]也许是你的意思。但仍然投票让我到达那里。
2赞 Fuat 7/25/2019
您可以将其放在查询🤫“ORDER BY t.name”的末尾
2赞 OrizG 4/24/2020
用户要当心。上面的查询意味着访问“sys”对象,但并不总是正确的。例如,在我的情况下,该查询未返回任何内容。相反,使用“INFORMATION_SCHEMA”就像一个魅力。
1赞 Allan F 6/16/2020
通常,对于标志,1 为 true,0 为 false。is_nullable标志也是这样工作的。“能够为空”的列,即is_nullable标有 1,而“不能为空”的列标有 1。即 is_nullable 为 false,标记为 0 值。只是有点有趣,让我的思绪围绕着..
1赞 Allan F 6/16/2020
如果对仅包含视图的列感兴趣,也可以将 sys.tables 切换为 sys.views。
63赞 Dwoolk 4/14/2013 #8

如果您更喜欢第三方工具,那里有很多选择,例如:

如果您的数据库包含加密对象(视图、过程、函数),则这些会非常方便,因为您无法使用系统表轻松搜索这些对象。

22赞 Ritesh Varma-MCA 10/18/2013 #9
SELECT  [TABLE_NAME] ,
        [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
8赞 Mauro Bilotti 3/14/2014 #10
DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'

SELECT t.name AS Table, c.name AS Column,
ty.name AS Type, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name
6赞 Danimal111 6/27/2014 #11

希望这不是一个重复的答案,但我喜欢做的是在 sql 语句中生成一个 sql 语句,该语句将允许我搜索我正在寻找的值(而不仅仅是具有这些字段名称的表(因为我通常需要删除与我正在寻找的列名的 id 相关的任何信息):

  SELECT  'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'

然后我可以复制并粘贴运行我的第一列“SQLToRun”......然后我将“Select * from”替换为“Delete from”,它允许我删除对该给定ID的任何引用!将这些结果写入文件,以防万一。

注意**** 确保在运行你的 delete 语句之前删除任何 bakup 表...

  SELECT  'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'
13赞 Alz 7/10/2014 #12

我刚刚尝试过,效果很好

USE YourDatabseName
GO
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%YourColumnName%'
ORDER BY schema_name, table_name;

仅将 YourDatbaseName 更改为您的数据库,将 YourcolumnName 更改为您要查找的列名,其余的保持原样。

希望这有帮助

63赞 user3583912 8/19/2014 #13

我不知道为什么你们中的许多人建议加入.sys.table with sys.columns

您可以使用以下代码:

SELECT Object_name(object_id) AS TableName,
       *
FROM   sys.columns
WHERE  NAME LIKE '%MyName%' 

如果您还需要架构名称:

SELECT *
FROM   information_schema.columns
WHERE  column_name LIKE '%MyName%' 

评论

2赞 K Kimble 2/12/2015
他们从 sys.tables 获取架构名称,也许这对您来说不是问题,但对很多人来说都是问题。
1赞 user3583912 2/25/2015
嗨,但仍然不需要加入 sys.objects 作为架构名称,您可以使用 Select * from INFORMATION_SCHEMA。COLUMN_NAME类似于“%MyName%”的列
1赞 K Kimble 2/26/2015
很高兴你指出INFORMATION_SCHEMA。COLUMNS,但是,如果运行 EXEC sp_helptext INFORMATION_SCHEMA。列,你可以看到它确实做了同样的事情,还有很多你可能不需要的无用的东西。
7赞 Rainhider 6/23/2015 #14

我将其用于相同的目的,并且它起作用了:

  select * from INFORMATION_SCHEMA.COLUMNS
  where TABLE_CATALOG= 'theDatabase'
  and COLUMN_NAME like 'theCol%'
4赞 Stephen Brett 8/4/2015 #15

为了改进上面的答案,我还包含了视图,并将架构和表/视图连接在一起,使结果更加明显。

DECLARE @COLUMNNAME AS VARCHAR(100);

SET @COLUMNNAME = '%Absence%';

SELECT CASE
           WHEN [T].[NAME] IS NULL
           THEN 'View'
           WHEN [T].[NAME] = ''
           THEN 'View'
           ELSE 'Table'
       END AS [TYPE], '[' + [S].[NAME] + '].' + '[' + CASE
                                                          WHEN [T].[NAME] IS NULL
                                                          THEN [V].[NAME]
                                                          WHEN [T].[NAME] = ''
                                                          THEN [V].[NAME]
                                                          ELSE [T].[NAME]
                                                      END + ']' AS [TABLE], [C].[NAME] AS [COLUMN]
FROM [SYS].[SCHEMAS] AS [S] LEFT JOIN [SYS].[TABLES] AS [T] ON [S].SCHEMA_ID = [T].SCHEMA_ID
                            LEFT JOIN [SYS].[VIEWS] AS [V] ON [S].SCHEMA_ID = [V].SCHEMA_ID
                            INNER JOIN [SYS].[COLUMNS] AS [C] ON [T].OBJECT_ID = [C].OBJECT_ID
                                                                 OR
                                                                 [V].OBJECT_ID = [C].OBJECT_ID
                            INNER JOIN [SYS].[TYPES] AS [TY] ON [C].[SYSTEM_TYPE_ID] = [TY].[SYSTEM_TYPE_ID]
WHERE [C].[NAME] LIKE @COLUMNNAME
GROUP BY '[' + [S].[NAME] + '].' + '[' + CASE
                                             WHEN [T].[NAME] IS NULL
                                             THEN [V].[NAME]
                                             WHEN [T].[NAME] = ''
                                             THEN [V].[NAME]
                                             ELSE [T].[NAME]
                                         END + ']', [T].[NAME], [C].[NAME], [S].[NAME]
ORDER BY '[' + [S].[NAME] + '].' + '[' + CASE
                                             WHEN [T].[NAME] IS NULL
                                             THEN [V].[NAME]
                                             WHEN [T].[NAME] = ''
                                             THEN [V].[NAME]
                                             ELSE [T].[NAME]
                                         END + ']', CASE
                                                        WHEN [T].[NAME] IS NULL
                                                        THEN 'View'
                                                        WHEN [T].[NAME] = ''
                                                        THEN 'View'
                                                        ELSE 'Table'
                                                    END, [T].[NAME], [C].[NAME];
7赞 Pedro S Cord 8/13/2015 #16
SELECT t.name AS table_name, 
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Label%'
ORDER BY schema_name, table_name;
43赞 Ste Bov 8/27/2015 #17

如果你只想要表名,你可以运行:

select object_name(object_id) from sys.columns
where name like '%received_at%'

如果你也想要模式名称(在很多情况下你会这样做,因为你会有很多不同的模式,除非你能记住数据库中的每个表及其所属的位置,否则这可能很有用):

select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'

最后,如果您希望它采用更好的格式(尽管这是代码(在我看来)变得过于复杂而无法轻松编写的地方):

select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'

注意,你也可以根据我所拥有的创建一个函数:

CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO

值得注意的是,concat 功能是在 2012 年添加的。对于 2008r2 及更早版本,请使用 + 连接字符串。

自从我发布这个以来,我已经重新格式化了过程。它现在更高级一些,但看起来更混乱(但它在一个过程中,所以你永远不会看到它),而且它的格式更好。

此版本允许您将其保存在管理数据库中,然后搜索任何数据库。将 from 的递减更改为您希望默认数据库为的任何一个(注意:使用 CONCAT() 函数仅适用于 2012+,除非您更改字符串连接以使用运算符)。@db'master'+

CREATE PROCEDURE [dbo].[usp_tablecheck]
    --Scan through all tables to identify all tables in the specified database with columns that have the provided string
    --Stephen B
    @name nvarchar(200)
    ,@db nvarchar(200) = 'master'
AS
    DECLARE @sql nvarchar(4000) = CONCAT('
        SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
            ,col.name AS [Column] 
        FROM ',@db,'.sys.columns col
        LEFT JOIN ',@db,'.sys.objects ob 
            ON ob.object_id = col.object_id
        WHERE 
            col.name LIKE CONCAT(''%'',''',@name,''',''%'') 
            AND ob.type =''U''
        ORDER BY [Table Name] ASC
            ,[Column] ASC')
    EXECUTE (@sql)
GO
241赞 Todd Vlk 9/23/2015 #18

SQL Server:

SELECT Table_Name, Column_Name 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'

神谕:

SELECT owner, table_name, column_name 
FROM all_tab_columns 
WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
AND OWNER IN ('YOUR_SCHEMA_NAME');
  • 就这么简单!!(SQL、PL/SQL)
    我一直使用它来查找给定数据库(架构)中列名的所有实例。
7赞 Iceknight 11/3/2015 #19

像 oracle 一样,您可以使用以下命令找到表和列:

select table_name, column_name
from user_tab_columns 
where column_name 
like '%myname%';
26赞 Munavvar 5/30/2016 #20

您可以从INFORMATION_SCHEMA找到它。按column_name过滤器划分的 COLUMNS

Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
     From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
5赞 DataWrangler 6/8/2016 #21
Create table #yourcolumndetails(
DBaseName varchar(100), 
TableSchema varchar(50), 
TableName varchar(100),
ColumnName varchar(100), 
DataType varchar(100), 
CharMaxLength varchar(100))

EXEC sp_MSForEachDB @command1='USE [?];
    INSERT INTO #yourcolumndetails SELECT
    Table_Catalog
    ,Table_Schema
    ,Table_Name
    ,Column_Name
    ,Data_Type
    ,Character_Maximum_Length
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME like ''origin'''

select * from #yourcolumndetails
Drop table #yourcolumndetails

评论

1赞 Fandango68 7/15/2019
这就是我一直在寻找的,一个跨任何数据库的解决方案,而不仅仅是一个。
23赞 Kaleab 8/1/2016 #22

获取完整信息:列名、表名以及表的架构。

SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%col_Name%'
7赞 soheila sadeghian 1/14/2017 #23

您可以尝试以下查询:

USE AdventureWorks
GO
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%myName%'

评论

2赞 user3428422 4/6/2017
看起来与 blog.sqlauthority.com/2008/08/06/ 非常相似......如果没有别的,可以帮助解释。
2赞 Janey 7/4/2018 #24

下面是 Sybase 数据库的工作解决方案

select 
  t.table_name, 
  c.column_name 
from 
  systab as t key join systabcol as c 
where 
   c.column_name = 'MyColumnName'

评论

3赞 Paiman Samadian 9/14/2018
没用。关键字“key”附近的语法不正确。
2赞 Sheikh Abdul Wahid 2/27/2020 #25

我们可以为此目的使用。sp_columns

sp_columns 'table name', null, null, '%column name%'

评论

0赞 arielkaluzhny 12/22/2022
似乎这仅限于一个表名,并且不会帮助 OP 找到所有被认为是构建块的表。learn.microsoft.com/en-us/sql/relational-databases/......
0赞 Sheikh Abdul Wahid 3/27/2023
将表参数保留为 null。sp_columns null、null、null、'%column name%'
4赞 Raj 2/28/2020 #26

用于显示指定列名的所有表的 SQL 查询:

SELECT SCHEMA_NAME(schema_id) + '.' + t.name AS 'Table Name'
  FROM sys.tables t
 INNER JOIN sys.columns c ON c.object_id = t.object_id
 WHERE c.name like '%ColumnName%'
 ORDER BY 'Table Name'
15赞 MarredCheese 3/3/2020 #27

我想要一些不会让我的眼睛流血的桌子景观

查询

SELECT
    t.TABLE_TYPE AS [Type],
    c.TABLE_NAME AS [Object],
    c.COLUMN_NAME AS [Column]
FROM
    INFORMATION_SCHEMA.COLUMNS AS c
    LEFT JOIN INFORMATION_SCHEMA.TABLES AS t ON
        t.TABLE_CATALOG = c.TABLE_CATALOG AND 
        t.TABLE_SCHEMA = c.TABLE_SCHEMA AND
        t.TABLE_NAME = c.TABLE_NAME
WHERE
    c.COLUMN_NAME LIKE '%myName%'
ORDER BY
    [Type],
    [Object],
    [Column]

结果

Type        Object   Column
----------------------------
BASE TABLE  Table1   myName1
BASE TABLE  Table2   myName2
VIEW        View1    myName1
VIEW        View2    myName2
30赞 Yogendra 3/4/2020 #28

这是您问题的答案

SELECT c.name AS ColumnName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%myName%';
17赞 dev_2014 7/21/2020 #29

在 MS SQL Server 数据库中,使用此查询获取包含输入文本的表和相应的列名:

SELECT t.name AS tableName, c.name AS columnName 
FROM sys.tables as t 
INNER JOIN sys.columns AS c ON t.object_id=c.object_id 
WHERE c.name LIKE '%<your_search_string>%'
2赞 Goutam 10/11/2020 #30

在 MS SQL 中,您可以编写以下行来检查特定表的列名:

sp_help your_tablename

或者,您可以先在查询窗口中选择表名称(突出显示架构和表名称),然后按下面的组合键:

Alt + F1

评论

0赞 simo.3792 11/1/2022
OP 询问如何在所有表中查找与条件匹配的列。在给定表中找不到列的名称。
1赞 Majedur 1/6/2021 #31

此外,还可以找到具有指定架构的列名称。

SELECT 'DBName' AS DBName,
       column_name,
       table_name,
       table_schema
FROM   dbname.information_schema.columns
WHERE  column_name LIKE '%YourColumnName%'
       AND table_schema IN ( 'YourSchemaName' ) 

您还可以在多个数据库上找到同一列。

SELECT 'DBName1' AS DB,
       column_name,
       table_name,
       table_schema
FROM   dbname1.information_schema.columns
WHERE  column_name LIKE '%YourColumnName%'
UNION
SELECT 'DBName2' AS DB,
       column_name,
       table_name,
       table_schema
FROM   dbname2.information_schema.columns
WHERE  column_name LIKE '%YourColumnName%' 
36赞 Gudwlk 3/16/2021 #32
SELECT table_schema + '.' + table_name,
       column_name
FROM   [yourdatabase].information_schema.columns
WHERE  column_name LIKE '%myName%' 

这将为您提供需要查找的列的表名。

9赞 Saurabh Rana 8/18/2021 #33

这个简单的查询对我有用。

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'schemaName'
AND column_name like '%model%';

评论

0赞 B.Nishan 5/20/2022
简单及其检查表和视图
-1赞 hardik rawal 5/25/2022 #34

可以在 SQL Server 中使用以下查询。

SELECT column_name AS 'ColumnName',
       table_name  AS 'TableName'
FROM   information_schema.columns
WHERE  column_name LIKE '%columnname%'
       AND table_schema = 'schema'
ORDER  BY tablename,
          columnname;
14赞 Rinku Choudhary 9/8/2022 #35

它将返回 table_name , schema_name , column_name

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c
ON t.object_id = c.object_id
WHERE c.name LIKE '%colName%'
ORDER BY schema_name,
table_name;
5赞 Mahum 6/21/2023 #36

若要在 MS SQL Server 中查找包含具有指定名称的列的所有表,可以查询系统目录视图。具体而言,可以查询 sys.tables 和 sys.columns 视图。下面是一个示例查询:

SELECT t.name AS table_name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name = 'column_name';

替换为要搜索的列的名称。此查询根据 object_id 列联接 sys.tables 和 sys.columns 视图,并筛选结果以检索列名与指定值匹配的表名。column_name

dbForge Studio for SQL Server 中,您可以使用 SQL 编辑器执行上述查询。它提供语法高亮显示、代码完成和结果查看等功能,可以更轻松地高效编写和执行 SQL 查询。