Share via


sp_addtype (Transact-SQL)

建立別名資料型別。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 CREATE TYPE

主題連結圖示Transact-SQL 語法慣例

語法

sp_addtype [ @typename = ] type, 
    [ @phystype = ] system_data_type 
    [ , [ @nulltype = ] 'null_type' ] ;

引數

  • [@typename= ] type
    這是別名資料型別的名稱。別名資料型別名稱必須遵照識別碼的規則,且在每個資料庫中必須是唯一的。type 是 sysname,沒有預設值。

  • [@phystype=] system_data_type
    這是作為別名資料型別之基礎的實體資料類型或 SQL Server 提供的資料類型。system_data_type 是 sysname,沒有預設值,且可以是下列值之一:

    bigint

    binary(n)

    bit

    char(n)

    datetime

    decimal

    float

    image

    int

    money

    nchar(n)

    ntext

    numeric

    nvarchar(n)

    real

    smalldatetime

    smallint

    smallmoney

    sql_variant

    text

    tinyint

    uniqueidentifier

    varbinary(n)

    varchar(n)

    有內嵌的空格或標點符號的所有參數,其前後需要加上引號。如需有關可用資料類型的詳細資訊,請參閱<資料類型 (Transact-SQL)>。

  • n
    這是非負數整數,表示所選資料類型的長度。

  • P
    這是一個非負數整數,它指出可儲存的最大十進位數總數,小數點左右兩側都包括在內。如需詳細資訊,請參閱<decimal 和 numeric (Transact-SQL)>。

  • s
    這是一個非負數整數值,它指出小數點右側所能儲存的最大十進位數,且它必須小於或等於有效位數。如需詳細資訊,請參閱<decimal 和 numeric (Transact-SQL)>。

  • [@nulltype = ] 'null_type'
    指出別名資料型別處理 Null 值的方式。null_type 是 varchar(8),預設值是 NULL,且需以單引號括住 ('NULL'、'NOT NULL' 或 'NONULL')。如果 sp_addtype 沒有明確定義 null_type,它會設為目前的預設 Null 屬性。您可以利用 GETANSINULL 系統函數來決定目前的預設 Null 屬性。您可以利用 SET 陳述式或 ALTER DATABASE來調整這項作業。Null 屬性應明確定義。如果 @phystypebit,且沒有指定 @nulltype,則預設值為 NOT NULL。

    [!附註]

    null_type 參數只定義這項資料類型的預設 Null 屬性。如果在使用別名資料型別時 (在資料表建立期間) 明確定義 Null 屬性,它的優先順序高於定義的 Null 屬性。如需詳細資訊,請參閱<ALTER TABLE (Transact-SQL)>和<CREATE TABLE (Transact-SQL)>。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

別名資料型別名稱在資料庫中必須是唯一的,但名稱不同的別名資料型別可以有相同的定義。

執行 sp_addtype 會建立別名資料型別,該別名資料型別會出現在特定資料庫的 sys.types 目錄檢視中。如果該別名資料型別必須用在所有新的使用者自訂資料庫中,請將它加入至 model 中。建立別名資料型別之後,您可以在 CREATE TABLE 或 ALTER TABLE 中使用它,您也可以將預設值和規則繫結到該別名資料型別。所有利用 sp_addtype 建立的純量別名資料型別都包含在 dbo 結構描述中。

別名資料型別繼承資料庫的預設定序。別名資料型別之資料行和變數的定序定義於 Transact-SQL CREATE TABLE、ALTER TABLE 及 DECLARE @local_variable 陳述式中。資料庫的預設定序變更只會套用至該類型的新資料行和變數;它不會改變現有類型的定序。

安全性注意事項安全性注意事項

為了與舊版相容,public 資料庫角色會自動被授與在利用 sp_addtype 建立的別名資料型別上的 REFERENCES 權限。請注意,當利用 CREATE TYPE 陳述式 (而不是 sp_addtype) 建立別名資料型別時,不會發生這類自動授與。

別名資料型別不能利用 SQL Server、timestamp、table、xml、varchar(max)、nvarchar(max) 或 varbinary(max) 資料類型來定義。

權限

需要 db_owner 中的成員資格,或 db_ddladmin 固定資料庫角色。

範例

A. 建立不允許 Null 值的別名資料型別

下列範例建立一個名為 ssn (社會保險號碼) 的別名資料型別,它以 SQL Server-supplied varchar 資料類型為基礎。ssn 資料類型用於保留 11 位數之社會保險號碼 (999-99-9999) 的資料行。該資料行不能是 NULL。

請注意,varchar(11) 以單引號括住,因為它包含標點 (括號)。

USE master;
GO
EXEC sp_addtype ssn, 'varchar(11)', 'NOT NULL';
GO

B. 建立允許 Null 值的別名資料型別

下列範例建立一個名為 birthday 的別名資料型別 (以 datetime 為基礎) ,它允許 Null 值。

USE master;
GO
EXEC sp_addtype birthday, datetime, 'NULL';

C. 建立其他別名資料型別

下列範例建立兩個其他的別名資料型別 telephone 和 fax,這兩個資料類型可供國內和國際電話和傳真號碼使用。

USE master;
GO
EXEC sp_addtype telephone, 'varchar(24)', 'NOT NULL';
GO
EXEC sp_addtype fax, 'varchar(24)', 'NULL';
GO