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

自訂函數實作:依資料表名稱取得結構定義(欄位名、型別、長度、允許空值)

     編輯:關於SqlServer

函數分類與選型

  • 純量函數:回傳單一值
  • 資料表值函數:回傳 Table 型別資料集
    • 內嵌:單一 SELECT 陳述句
    • 多陳述式:多個 SELECT 組成(本例採用)

多陳述式資料表值函數語法架構

CREATE FUNCTION function_name
(@parameter_name datatype)
RETURNS @return_variable TABLE (column_definitions)
AS
BEGIN
    function_body
    RETURN
END

實作程式碼:tablestructure 函數

CREATE FUNCTION tablestructure
(@objname NVARCHAR(111))  -- 目標資料表名稱
RETURNS @table TABLE (
    FieldName VARCHAR(50),   -- 欄位名稱
    Type VARCHAR(16),        -- 資料型別
    Length INT,              -- 長度
    Nullable VARCHAR(3)      -- 是否允許 NULL (yes/no)
)
AS
BEGIN
    DECLARE @objid INT

    -- 1. 從 sysobjects 取得物件識別碼
    SELECT @objid = id FROM sysobjects WHERE id = OBJECT_ID(@objname)

    -- 2. 從 syscolumns 取得欄位定義(排除程序參數 number=0)
    INSERT @table
    SELECT
        'FieldName' = name,
        'Type' = TYPE_NAME(xusertype),
        'Length' = CONVERT(INT, length),
        'Nullable' = CASE WHEN isnullable = 0 THEN 'no' ELSE 'yes' END
    FROM syscolumns
    WHERE id = @objid AND number = 0
    ORDER BY colid

    RETURN
END

系統表說明

  • sysobjects:資料庫中每個物件(條件約束、預設值、規則、預存程序等)佔一列
  • syscolumns:每個資料表與檢視表的每個資料行佔一列

呼叫範例

SELECT * FROM tablestructure('YourTableName')
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved