当前位置:首页 » 编程语言 » 表值参数sql

表值参数sql

发布时间: 2023-05-22 19:32:38

‘壹’ sql server存储过程的参数有哪些类型

SQL Server存储过程是SQL数据库的重要组成部分,其中可以用到许多参数。在SQL Server存储过程中,支持输入(Input)、输出参数(Output),也支持返回值参数(ReturnValue)。

返回值参数不是一个形参,而类似于编程中的返回值类型。它都是通过Return语句来返回的,而且在SQL Server中,必须返回INT型的数据,而且很显然,只能有一个返回值,因为RETURN语句其实是会终止SQL Server存储过程的。

例子:

ALTERPROCEDURE[dbo].[GetCustomers]
(@rowcountINTOUTPUT)
AS
SELECT[CustomerID]
,[CompanyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM[Northwind].[dbo].[Customers]
SET@rowcount=@@rowcount

‘贰’ sql server 2008 表值参数在哪

SQL SERVERE 2008 新颖之处在于表值参数(TVPS)。基本思想是数据表可以在客户端应用程序
或者T-SQL 中创建并填充。然后作力一个数据表变量传递到存储过程 或者由用户自定义的函数中。
这并不是一件要有可无的事情。
DEMO:

//订单表
CREATE TABLE dbo.Orders(
OrderId INT NOT NULL IDENTITY CONSTRAINT ORDERSPK PRIMARY KEY,
OrderDate DATETIME,
CustomerID INT
)
//订单明细表
CREATE TABLE dbo.OrderDetails(
OrderId INT NOT NULL CONSTRAINT orderdetailFkOrders REFERENCES Orders,
LineNumber SMALLINT NOT NULL,
ProctID INT
)

---数据表类型
CREATE TYPE OrderDetailsType as TABLE
(
LineNumber INT,
ProctID INT,
IsNew BIT,
IsDirty BIT,
IsDeleted BIT
)

‘叁’ sql2005中 表值函数是什么

表值函数是数据库中一种较为特殊的函数类型,它的返回值不再只是一个数值或一个字符串,而是一张数据表。也就是说表值函数返回的是
table
数据类型。对于内联表值函数,没有函数主体;表是单个
SELECT
语句的结果集。使用表值函数的时候,把函数直接当成是表或视图使用,表值函数的参数传入方法与标量函数没有区别。

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

在2008之前如果我们想要将表作为输入参数传递给SQL
Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。
在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数,即可向
Transact-SQL
语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。
表值参数是使用用户定义的表类型来声明的。所以使用之前要先定义表类型。
/*
创建表类型.*/
CREATE
TYPE
LocationTableType
AS
TABLE
(
LocationName
VARCHAR(50)
,
CostRate
INT
);
GO
/*
创建一个存储过程以表值参数作为输入.
*/
CREATE
PROCEDURE
dbo.
usp_InsertProctionLocation
@TVP
LocationTableType
READONLY
AS
SET
NOCOUNT
ON
INSERT
INTO
Proction.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_InsertProctionLocation@LocationTVP;
GO
查询表Proction.Location可以看到数据已经插入了。

‘伍’ 如何在SQL Server中批量导入数据

方案一、循环导入

实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高

方案二、使用Bulk插入

bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库,效率非常高

方案三:

利用SQLServer2008的新特性--表值参数(Table-Valued Parameter)。表值参数是SQLServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。

方案四:

对于单列字段,可以把要插入的数据进行字符串拼接,最后再在存储过程中拆分成数组,然后逐条插入。查了一下存储过程中参数的字符串的最大长度,然后除以字段的长度,算出一个值,很明显是可以满足要求的,只是这种方式跟第一种方式比起来,似乎没什么提高,因为原理都是一样的。

方案五:

考虑异步创建、消息队列等等。这种方案无论从设计上还是开发上,难度都是有的。

热点内容
QQ聊天密码怎么设置 发布:2024-05-18 02:35:16 浏览:371
pb级kv存储 发布:2024-05-18 01:47:30 浏览:821
免费加密狗 发布:2024-05-18 01:47:16 浏览:284
安卓手机如何把视频变成实况 发布:2024-05-18 00:57:35 浏览:800
如何禁止缓存后台进程 发布:2024-05-18 00:57:12 浏览:172
c语言中安 发布:2024-05-18 00:39:59 浏览:452
数据库建设书 发布:2024-05-18 00:39:17 浏览:827
破解压缩包解压密码 发布:2024-05-18 00:34:57 浏览:841
网页java代码在线编译 发布:2024-05-18 00:29:49 浏览:927
路由器编程器固件 发布:2024-05-18 00:13:41 浏览:257