我正在尝试两种方法来显示具有特定名称的列:
INFORMATION_SCHEMA.COLUMNS
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='SUPPLIER_NAME';
Run Code Online (Sandbox Code Playgroud)系统列
SELECT *
FROM SYS.COLUMNS
WHERE NAME='SUPPLIER_NAME'
Run Code Online (Sandbox Code Playgroud)为什么查询显示不同的输出?
Ken*_*her 18
INFORMATION_SCHEMA.COLUMNS
和之间的区别在于sys.columns
它们涵盖的对象类型。INFORMATION_SCHEMA.COLUMNS
仅限于表和视图。您可以通过执行以下操作来查看其背后的代码:
EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]
Run Code Online (Sandbox Code Playgroud)
如果您查看 where 子句的底部,您会看到
o.type IN ('U', 'V')
Run Code Online (Sandbox Code Playgroud)
这是它仅限于表和视图的地方。
如果然后查看 sys.columns 的定义,您将看到它包含许多其他对象的列:
运行这个,你将能够看到额外的对象是什么以及它是什么类型。
SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id),
OBJECTPROPERTYEX(object_id, 'BASETYPE'), *
FROM sys.columns
Run Code Online (Sandbox Code Playgroud)