輸入資料表名稱,回傳該表所有欄位名稱以逗號分隔的字串,適用於動態 SQL 拼裝、程式碼產生器等場景。
CREATE PROCEDURE pAllColumnSql
@tableName VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Name VARCHAR(2000) = '';
SELECT @Name = @Name + ',' + CAST(name AS VARCHAR)
FROM syscolumns
WHERE id = OBJECT_ID(@tableName);
-- 移除前導逗號
SET @Name = SUBSTRING(@Name, 2, LEN(@Name) - 1);
SELECT @Name AS ColumnList;
END;
GO
EXEC pAllColumnSql 'dbo.Orders';
-- 輸出: OrderID,CustomerID,OrderDate,TotalAmount,Status
syscolumns 為相容性視圖,建議改用 sys.columns:
SELECT @Name = @Name + ',' + name
FROM sys.columns
WHERE object_id = OBJECT_ID(@tableName);
CREATE PROCEDURE usp_GetTableColumns
@tableName NVARCHAR(128),
@schemaName NVARCHAR(128) = 'dbo'
AS
BEGIN
SELECT
c.name AS ColumnName,
t.name AS DataType,
c.max_length AS MaxLength,
c.precision AS Precision,
c.scale AS Scale,
c.is_nullable AS IsNullable,
c.is_identity AS IsIdentity
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID(QUOTENAME(@schemaName) + '.' + QUOTENAME(@tableName))
ORDER BY c.column_id;
END;
簡易版 pAllColumnSql 適合快速取得欄位字串;進階版回傳結構化中繼資料,支援程式碼產生、文檔輸出等更豐富場景。