首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 查詢資料表欄位名稱:sys.columns、INFORMATION_SCHEMA 與動態產生 SELECT 清單實戰

     編輯:關於SqlServer

標準資訊結構描述檢視 (INFORMATION_SCHEMA) — 跨資料庫可攜

-- 查詢指定資料表所有欄位
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable' AND TABLE_SCHEMA = 'dbo';

系統目錄檢視 (sys.columns) — SQL Server 專用、效能最佳

-- 基礎查詢
SELECT name AS ColumnName, column_id AS ColOrder
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.YourTable');

-- 含資料類型、長度、精度、身分識別、預設值
SELECT c.name AS ColumnName,
       t.name AS DataType,
       c.max_length AS MaxLength,
       c.precision, c.scale,
       c.is_nullable AS IsNullable,
       c.is_identity AS IsIdentity,
       dc.definition AS DefaultValue
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id
WHERE c.object_id = OBJECT_ID('dbo.YourTable')
ORDER BY c.column_id;

舊版相容:syscolumns/sysobjects (SQL 2000 風格,不建議新專案使用)

SELECT name FROM syscolumns
WHERE id = OBJECT_ID('YourTable');

實戰:動態產生 SELECT 欄位清單字串

DECLARE @Cols NVARCHAR(MAX) = N'';
SELECT @Cols += QUOTENAME(name) + N', '
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.YourTable')
ORDER BY column_id;

-- 移除尾端逗號
SET @Cols = LEFT(@Cols, LEN(@Cols) - 1);

-- 動態 SQL 範例
DECLARE @SQL NVARCHAR(MAX) = N'SELECT ' + @Cols + N' FROM dbo.YourTable;';
EXEC sp_executesql @SQL;

進階:判斷資料表是否存在

IF OBJECT_ID('dbo.YourTable', 'U') IS NOT NULL
    PRINT '資料表存在';
ELSE
    PRINT '資料表不存在';

應用場景

  • 程式碼產生器(Entity Class、DTO、Repository)
  • 動態建立暫存表/同步結構/比對 Schema 差異
  • ETL 封裝自動對應來源/目的欄位
  • 審計觸發器記錄變更欄位

權限需求

  • VIEW DEFINITION 權限或 db_ddladmin/db_owner
  • 跨資料庫查詢需 SELECT 權限於目標資料庫的 sys.columns
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved