数据库 
首页 > 数据库 > 浏览文章

SQL Server存储过程中使用表值作为输入参数示例

(编辑:jimmy 日期: 2024/11/9 浏览:3 次 )

在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可以看到数据已经插入了。

上一篇:Select count(*)、Count(1)和Count(列)的区别及执行方式
下一篇:SQL Server中将数据导出为XML和Json方法分享
一句话新闻
微软与英特尔等合作伙伴联合定义“AI PC”:键盘需配有Copilot物理按键
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。