使用者定義表類型 (User-Defined Table Type, UDTT) 為預先定義的表結構,可作為:
CREATE TABLE dbo.Contact (
ContactID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
FirstName NVARCHAR(80) NOT NULL,
LastName NVARCHAR(80) NOT NULL,
Email NVARCHAR(80) NOT NULL,
Phone VARCHAR(25) NULL,
Created DATETIME NOT NULL DEFAULT GETDATE()
);
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)
);
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;
var dt = new DataTable();
dt.Columns.Add("ContactID", typeof(Guid));
dt.Columns.Add("FirstName", typeof(string));
// ... 填入資料
using (var cmd = new SqlCommand("InsertContacts", conn) { CommandType = CommandType.StoredProcedure })
{
var param = cmd.Parameters.AddWithValue("@contacts", dt);
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.ContactStruct";
cmd.ExecuteNonQuery();
}
DROP TYPE ...; CREATE TYPE ...)。