1.1 簡介
SQL Server 中,使用者定義表類型是指使用者所定義的表示表結構定義的類型。您可以使用使用者定義表類型為預存程序或函式宣告表值參數,或者聲明您要在批處理中或在預存程序或函數的主體中使用的表變數。
若要建立使用者定義表類型,請使用CREATE TYPE語句。為了確保使用者定義表類型的資料滿足特定要求,您可以對使用者定義表類型建立唯一約束和主鍵。
1.2 使用例題
在建立使用者定義表類型前先建立一個資料庫表
USE [Contacting]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Contact](
[ContactID] [uniqueidentifier] NOT NULL,
[FirstName] [nvarchar](80) NOT NULL,
[LastName] [nvarchar](80) NOT NULL,
[Email] [nvarchar](80) NOT NULL,
[Phone] [varchar](25) NULL,
[Created] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ContactID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Contact] ADD DEFAULT (getdate()) FOR [Created]
GO
然後建立一個使用者定義表類型 InsertContacts
USE [Contacting]
GO
CREATE TYPE [dbo].[ContactStruct] AS TABLE(
[ContactID] [uniqueidentifier] NOT NULL,
[FirstName] [nvarchar](80) NOT NULL,
[LastName] [nvarchar](80) NOT NULL,
[Email] [nvarchar](80) NOT NULL,
[Phone] [varchar](25) NOT NULL,
PRIMARY KEY CLUSTERED
(
[ContactID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
SQL Server Management Studio看到的結果如下:
現在我們開始使用使用者定義表類型 編寫預存程序
USE [Contacting]
GO
CREATE PROCEDURE [dbo].[InsertContacts]
@contacts AS ContactStruct READONLY
AS
INSERT INTO Contact(ContactID, FirstName, LastName, Email, Phone)
SELECT ContactID, FirstName, LastName, Email, Phone FROM @contacts;
RETURN 0
1.3 使用限制(很遺憾無法在表值參數中返回資料。 表值參數是只可輸入的參數;不支援 OUTPUT 關鍵字。)
請注意,使用者定義表類型使用有以下限制:
1.在建立使用者定義表類型定義後不能對其進行修改。(沒搞懂為什麼不可以修改)
2.不能在使用者定義表類型的計算資料行的定義中調用使用者定義函數。
3.無法對使用者定義表類型建立非叢集索引,除非該索引是對使用者定義表類型建立PRIMARY KEY 或UNIQUE約束的結果。
4.使用者定義表類型不能用作表中的列或結構化使用者定義型別中的欄位。