Sqlserver浅谈用户定义表类型

  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.用户定义表类型不能用作表中的列或结构化用户定义类型中的字段。

时间: 2024-08-31 20:18:36

Sqlserver浅谈用户定义表类型的相关文章

浅谈PHP定义命令空间的几个注意点(推荐)_php技巧

1.声明命令空间必须是程序脚本的第一条语句.另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前. 下面是错误的示例: <html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?> 这个也是错误的 <?php // Lots // of // interesting // comments and white space namespace Foo; class Bar { } ?> 2.

浅谈c语言中类型隐性转换的坑_C 语言

谨记:在C语言中,当两种不同类型之间运算时,低字节长度类型会向高自己长度类型转换,有符号会向无符号类型转换. 举例子如下: #include <stdio.h> void func(void) { int i = 1; unsigned char c1 = 1; signed char c2 = -1; if (c2 > i){ printf("\r\n -1 > 1"); } else{ printf("\r\n -1 <= 1");

浅谈PHP中其他类型转化为Bool类型_php技巧

问题起由:PHP中if(true==2)会返回true还是false? 结果是返回true,顺着这个问题,我把php其他数据类型也测试一下. 结论: 转化为bool类型时,会变成false的几种数据: 1.整型0 2.空字符串 3.空数组 4.NULL 欢迎补充... 测试代码: <?php function p($title,$mybool){ echo "<pre>".$title; echo var_dump($mybool)."</pre>

浅谈用户网站访问行为分析

中介交易 SEO诊断 淘宝客 云主机 技术大厅 随着互联网的发展,网站推广.网站营销成为一种任何一个想利用互联网成就一番事业的企业都不能忽视的手段, 毕竟与采用传统方式营销推广所需要的花费相比,网络无疑具有先天优势.但同时问题也随之而来,如何得到网站推广网站营销的效果评估?如何制定下一步的策略? 为了解决这些问题,网站流量统计产品应运而生,国外多家调查研究机构的研究也都证实了网站流量统计分析对于网络营销效果的价值,但在网站营销管理实践应用中,大部分的企业只是通过网站流量统计产品关心一下在线人数,

什么让网站设计出了问题 浅谈用户体验的“反面模式”

作为网站的一个用户,你也许时常会发现,使用网站时,有些东西很令人厌烦.例如一个登录的表单,或是导航,或者是整个网页应用,都有可能让你难以完成一项任务.是什么原因让网站的设计产生了这些问题? 答案是复杂的.首当其冲的问题是,设计师们可能忽略了很重要的一点:对实际用户进行测试.这个问题的原因通常是,设计师想当然的认为,他们自己知道如何处理好网站某一部分的交互细节.因为很多设计师觉得,他们已经在其他案例中看到过类似的交互,原设计者肯定已经测试过,为什么多此一举呢? 拿来就好.于是,我们频繁查看别人写好

让数据站住脚-浅谈用户研究中的信度与效度

在用户研究工作中,如何让自己的数据和结论更有说服力,是很重要的问题.最近将自己积累的用研信度和效度的笔记整理一下,罗列在文中,希望对大家有所帮助. 一.调查的质量取决于调查的信度和效度. 信度主要指测量结果的一致性.稳定性.也就是说结论和数据是否反映了用户最真实稳定的想法.用户在回答问题的时候,往往会受到环境.时间.当时当地的情绪影响,而作出并不真实的想法,即会有随机误差. 信度就是衡量这种随机误差对用户想法的影响大小. 效度是指多大程度上测量了你想要测量的东西. 对某个产品用研,我们现在用得最

浅谈用户体验

谈到用户体验,不得不提到我同事写过的一段话. 曾见众多能力,操守俱佳之女子,却无遮百丑之美而隐于市,可谓"纵有千种风情 更与何人说".将此铺开至IT业, 为什么Apple掘弃兼容之路却仍引吭高歌:为什么微软的网站从蓝白格子演变到风情万种:为什么Firefox要雇佣Humanized的顶级员工.因为他们不能容忍失去用户的眼球,不能容忍因此而丧失展示强大的机会."华丽"是用户对产品叹为观止后最直接的表述,而"爱不释手"是良好用户体验所产生粘度带来的最

浅谈用户体验的“反面模式”

作为网站的一个用户,你也许时常会发现,使用网站时,有些东西很令人厌烦.例如一个登录的表单,或是导航,或者是整个网页应用,都有可能让你难以完成一项任务.是什么原因让网站的设计产生了这些问题? 答案是复杂的.首当其冲的问题是,设计师们可能忽略了很重要的一点:对实际用户进行测试.这个问题的原因通常是,设计师想当然的认为,他们自己知道如何处理好网站某一部分的交互细节.因为很多设计师觉得,他们已经在其他案例中看到过类似的交互,原设计者肯定已经测试过,为什么多此一举呢? 拿来就好.于是,我们频繁查看别人写好

浅谈用户体验的重要性

作为SEOer我们应当时常问问自己,SEO是什么?SEO能干什么?SEO最终是做给谁看的?这几个问题.很多SEOer经常说SEO越来越难做,只是他们没有认清楚SEO的核心问题,那么下面先谈下SEO的核心问题,SEOer经常有个误区,认为SEO的目的是为了提升网站排名,带来流量,其实不然,而SEO最终的目的是做给用户看的,而不是做给搜索引擎,换言之SEOer和搜索引擎并非对立的关系,搜索引擎只是负责将你网站的信息传递给每一个有需求的访客面前,什么样的信息对用户是有价值的呢?大家有没有认真的思考过呢