SQL Server 2008对T-SQL语言的增强
2007-12-04 09:52:36 来源:WEB开发网5. 用户自定义表数据类型
现在,SQL Server 提供一种新的用户自定义数据类型——自定义表数据类型(User-defined Table Types)。它可以作为参数提供给语句、存储过程或者函数。您还可以为它创建唯一约束和主键。
请使用 CREATE TYPE 语句创建这种数据类型。如:
USEAdventureWorks;
GO
/**//*Createauser-definedtabletype*/
CREATETYPELocationTableTypeASTABLE
(LocationNameVARCHAR(50)
,CostRateINT);
GO
对于表类型,有如下约束:
1、用户自定义表类型不能作为表的列或者结构化用户自定义类型的域。
2、基于用户自定义表类型的别名类型。
3、不允许 NOT FOR REPLICATION 选项。
4、CHECK 约束需要一个计算列。
5、在计算列上的主键必须包含 NOT NULL 和 PERSISTED 约束。
6、不能在用户自定义表类型上创建非簇索引。除非索引是创建 PRIMARY KEY 或 UNIQUE 约束的返回值。
7、不能指定 DEFAULT 值。
8、一旦用户自定义表类型被创建,则它就无法更改。
9、如果没有定义用户自定义表类型上的计算列,则用户自定义函数无法调用。
6. 表值参数
数据库引擎现在支持一种新的参数类型来引用用户自定义表类型(参考 5)。表值参数可以发送更多的 SQL Server 数据。
下面的示例展示了如何使用表值参数。
USEAdventureWorks;
GO
/**//*Createatabletype.*/
CREATETYPELocationTableTypeASTABLE
(LocationNameVARCHAR(50)
,CostRateINT);
GO
/**//*Createaproceduretoreceivedataforthetable-valuedparameter.*/
CREATEPROCEDUREusp_InsertProductionLocation
@TVPLocationTableTypeREADONLY
AS
SETNOCOUNTON
INSERTINTO[AdventureWorks].[Production].[Location]
([Name]
,[CostRate]
,[Availability]
,[ModifiedDate])
SELECT*,0,GETDATE()
FROM @TVP;
GO
/**//*Declareavariablethatreferencesthetype.*/
DECLARE@LocationTVP
ASLocationTableType;
/**//*Adddatatothetablevariable.*/
INSERTINTO@LocationTVP(LocationName,CostRate)
SELECT[Name],0.00
FROM
[AdventureWorks].[Person].[StateProvince];
/**//*Passthetablevariabledatatoastoredprocedure.*/
EXECusp_InsertProductionLocation@LocationTVP;
GO
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接