视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLServer存储过程中使用表值作为输入参数示例
2020-11-09 07:03:48 责编:小采
文档


在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。

在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。
表值参数是使用用户定义的表类型来声明的。所以使用之前要先定义表类型。

/* 创建表类型.*/
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50)
, CostRate INT );
GO
 
/* 创建一个存储过程以表值参数作为输入. */
CREATE PROCEDURE dbo. usp_InsertProductionLocation
 @TVP LocationTableType READONLY
 AS
 SET NOCOUNT ON
 INSERT INTO Production.Location
 (Name
 ,CostRate
 ,Availability
 ,ModifiedDate)
 SELECT *, 0, GETDATE()
 FROM @TVP;
 GO
 
 
/* 声明表值参数变量.*/
DECLARE @LocationTVP ASLocationTableType;
 
/* 将数据插入表值变量*/
INSERT INTO @LocationTVP(LocationName, CostRate)
 SELECT Name, 0.00
 FROM Person.StateProvince;
 
/* 将变量传递给存储过程*/
EXEC usp_InsertProductionLocation@LocationTVP;
GO

查询表Production.Location可以看到数据已经插入了。

您可能感兴趣的文章:

  • SQL Server中的Forwarded Record计数器影响IO性能的解决方法
  • SQLServer存储过程中事务的使用方法
  • SQL SERVER调用存储过程小结
  • SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)
  • 下载本文
    显示全文
    专题