/*
SQL SERVER 2008 表值参数
SQL SERVER 引入了抗议用来将行集传入到存储过程和用户定义函数的表值参数.
这个功能可以使存储过程和函数具有封装多个行集的功能,而不是必须一行一行地调
数据修改过程和穿件多个输入参数来生硬的转化为多行.
我们在应用中经常用到的插入时把代码封装到存储过程中。
*/
CREATE DATABASE TESTDB
USE TESTDB
GO
CREATE TABLE USERINFO(USERID INT,USERNAME NVARCHAR(50))
GO
CREATE PROC USP_INSERT_USERINFO
@ID INT,
@NAME NVARCHAR(50)
AS
INSERT USERINFO
VALUES(@ID,@NAME)
GO
/*
上面的环境建立好后,如果我们需要向表中插入行数,就需要调用次这个
存储过程。在大多数情况下这样的情况是可以接受的,如果你经常需要一次插入多
条。那么就可以用中新增的表值参数类型,可以将要插入的数据传入到表值参
数中,然后通过表值参数一次性插入的表中。
下面演示该参数类型。
*/
--要使用表值参数,首先要定义用户定义表数据类型。
CREATE TYPE T_USERINFO AS TABLE
(USERIDINT,
USERNAME NVARCHAR(50)
)
GO
--下面可以对上面的过程USP_INSERT_USERINFO进行修改。
CREATE PROC USP_INSERT_USERINFO_NEW
@USERINFO T_USERINFO READONLY --必须使用READONLY 选项声明表值参数
AS
INSERT USERINFO
SELECT * FROM @USERINFO
GO
--一次插入多条数据
DECLARE @USERINFO AS T_USERINFO
INSERT @USERINFO VALUES(1001,'小张')
INSERT @USERINFO VALUES(1002,'小王')
INSERT @USERINFO VALUES(1003,'小李')
INSERT @USERINFO VALUES(1004,'小明')
EXEC USP_INSERT_USERINFO_NEW @USERINFO
SELECT * FROM USERINFO
/*
在处理业务时这个表值参数的新功能会很有用。譬如一个处理产品订单的网站,现在可以传入结果集
到一个存储过程中,而不是为每个产品每次调用存储过程。对于繁忙的系统,表值参数减少了应用程序和
数据库服务器之间的交互,从而减少了占用的带宽,数据库端的事务处理更高效。
*/