SQL Server查询以获取表中的列列表,包括编号、数据类型、非空以及其来源。
SQL Server查询以获取表中的列列表,包括编号、数据类型、非空以及其来源。
我需要在 SQL Server 上编写一个查询,以获取特定表中的列列表,包括生成的编号、关联的数据类型(带长度)、是否为空(是则为Yes,否则为No),以及最后的来源,包括数据库和表名。
例如,查看AdventureWorksDW
中的表[dbo].[DimProduct]
,我可以看到:
CREATE TABLE [dbo].[DimProduct] ( [ProductKey] [INT] IDENTITY(1,1) NOT NULL, [ProductAlternateKey] [NVARCHAR](25) NULL, [ProductSubcategoryKey] [INT] NULL, [WeightUnitMeasureCode] [NCHAR](3) NULL, [SizeUnitMeasureCode] [NCHAR](3) NULL, [EnglishProductName] [NVARCHAR](50) NOT NULL, ...
我想创建一个选择语句来提供以下结果:
编号 名称 类型 是否为空 来源 --------------------------------------------------------------------------------------------- 1 ProductKey int 否 AdventureWorksDW.dbo.DimProduct 2 ProductAlternateKey nvarchar(25) 是 AdventureWorksDW.dbo.DimProduct 3 ProductSubcategoryKey int 是 AdventureWorksDW.dbo.DimProduct … … … … …
问题的原因是需要获取一个表中的列的列表,包括列的编号、数据类型、是否为空以及来源。解决方法是使用SQL Server查询来获取这些信息。
首先,在单个数据库中生成所有表的列表非常简单,只需要使用以下查询语句:
SELECT [Number] = f.column_ordinal, Name = f.name, [Type] = f.system_type_name, [Is Null] = CASE f.is_nullable WHEN 1 THEN 'Yes' ELSE 'No' END, Source = QUOTENAME(DB_NAME()) + N'.' + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name) FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id] CROSS APPLY sys.dm_exec_describe_first_result_set ( N'SELECT * FROM ' + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name), N'', 0 ) AS f ORDER BY Source, [Number];
如果只需要某个表的列列表,可以添加以下条件:
WHERE s.name = N'dbo' AND t.name = N'DimProduct'
但是,这样输出的Source
列就没有实际用处,因为已经知道检索到的数据库、模式和表的信息。