Sqlserver淺談使用者定義表類型

來源:互聯網
上載者:User

  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.使用者定義表類型不能用作表中的列或結構化使用者定義型別中的欄位。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.