SQL SERVER查询字段在哪个表里

本文提供了一段SQL脚本,用于从数据库中查询表的详细信息,包括表名、字段名、字段类型等,并支持模糊搜索。该脚本适用于需要了解数据库表结构的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DECLARE @ColumnName  AS VARCHAR(100);
SET  @ColumnName='字段名的模糊匹配';

SELECT     
表名=D.NAME,  
表说明 = CASE   WHEN   A.COLORDER=1   THEN   ISNULL(F.VALUE, ' ')   ELSE   ' '   END,   
字段序号 = A.COLORDER,   
字段名 =   A.NAME,   
标识  =   CASE   WHEN   COLUMNPROPERTY(   A.ID,A.NAME, 'ISIDENTITY ')=1   THEN   ''ELSE   ' '   END,   
主鍵 =   CASE   WHEN   EXISTS(SELECT   1   FROM   SYSOBJECTS   WHERE   XTYPE= 'PK '   AND   PARENT_OBJ=A.ID   AND   NAME   IN   (   
SELECT   NAME   FROM   SYSINDEXES   WHERE   INDID   IN(   
SELECT   INDID   FROM   SYSINDEXKEYS   WHERE   ID   =   A.ID   AND   COLID=A.COLID)))   THEN   ''   ELSE   ' '   END,   
类型 =   B.NAME,   
占用字节数   =   A.LENGTH,   
长度 =  COLUMNPROPERTY(A.ID,A.NAME, 'PRECISION '),   
小数位数 =   ISNULL(COLUMNPROPERTY(A.ID,A.NAME, 'SCALE '),0),   
允许空 =   CASE   WHEN   A.ISNULLABLE=1   THEN   ''ELSE   ' '   END,   
默认值  =   ISNULL(E.TEXT, ' '),   
字段说明  =   ISNULL(G.[VALUE], ' ')   
FROM   SYSCOLUMNS   A LEFT   JOIN   SYSTYPES   B   ON   A.XUSERTYPE=B.XUSERTYPE   
INNER   JOIN   SYSOBJECTS   D   ON   A.ID=D.ID     AND   D.XTYPE= 'U '   AND     D.NAME <> 'DTPROPERTIES '   
LEFT   JOIN   SYSCOMMENTS   E   ON   A.CDEFAULT=E.ID   
LEFT   JOIN   sys.extended_properties   G   ON   A.ID=G.major_id   AND   A.COLID=G.minor_id       
LEFT   JOIN   sys.extended_properties   F   ON   D.ID=F.major_id   AND   F.minor_id=0   
WHERE a.name like  @ColumnName AND RIGHT(D.NAME,3)<>'Log'  
ORDER BY A.ID,A.COLORDER    

 

转载于:https://www.cnblogs.com/JinweiChang/p/10592817.html

<think>好的,用户的问题是想要在SQL Server找包含特定字段“NeedTickNo”的。我需要根据提供的引用信息来找到正确的方法。 首先,引用[5]提到了查询某个字段信息,使用syscolumns、systypes、sysobjects等系统。这可能可以用来反向找包含特定字段。用户需要的是字段名称为“NeedTickNo”,所以可能需要查询syscolumns,其中存储了字段信息。 然后,引用[5]中的查询条件是WHERE d.name = 'AAA',也就是指定名。但现在用户需要的是根据字段名找,所以需要反过来,在syscolumns中字段名为'NeedTickNo'的记录,然后关联到sysobjects来获取名。 所以,正确的查询应该是从syscolumns中筛选出name='NeedTickNo'的列,然后关联到sysojects,其中xtype='U'示用户。这样就能得到所有包含该字段名。 另外,注意引用[5]中的连接方式,可能需要调整JOIN条件。例如,syscolumns的id对应sysobjects的id,因此可以通过INNER JOIN sysobjects d ON a.id = d.id来连接,并且筛选d.xtype='U'以排除系统对象。 所以最终的查询应该是: SELECT d.name AS 名 FROM syscolumns a INNER JOIN sysobjects d ON a.id = d.id WHERE a.name = 'NeedTickNo' AND d.xtype = 'U' ORDER BY d.name; 这样就能列出所有包含NeedTickNo字段的用户了。 确认一下引用中的信息,引用[5]确实使用了syscolumns和sysobjects,并且通过d.name来指定名,这里反过来用字段名过滤即可。不需要其他复杂的连接,因为只需要名和字段名匹配的情况。因此,这个查询应该能满足用户的需求。</think>在 SQL Server查询包含特定字段 `NeedTickNo` 的,可以通过系统视图 `syscolumns` 和 `sysobjects` 实现。以下是具体步骤和 SQL 语句: ### 1. 使用系统视图查询 ```sql SELECT d.name AS 名 FROM syscolumns a INNER JOIN sysobjects d ON a.id = d.id WHERE a.name = 'NeedTickNo' AND d.xtype = 'U' -- 限定为用户 ORDER BY d.name; ``` **说明**: - `syscolumns` 存储所有字段信息,`sysobjects` 存储数据库对象(如)的元数据。 - `a.name = 'NeedTickNo'` 筛选字段名称为目标字段。 - `d.xtype = 'U'` 确保仅查询用户(排除系统等)[^5]。 ### 2. 使用 `INFORMATION_SCHEMA.COLUMNS`(更符合标准) ```sql SELECT TABLE_NAME AS 名 FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NeedTickNo'; ``` **说明**: - `INFORMATION_SCHEMA.COLUMNS` 是 ANSI 标准视图,通用性更强。 - 直接通过字段名 `COLUMN_NAME` 过滤结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值