Sql server 淺談用戶定義表類型

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.用戶定義表類型不能用作表中的列或結構化用戶定義類型中的字段。

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章