【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

SQL Server 中的表值型参数

  • 2008-09-02
  • 本文字数:1291 字

    阅读完需:约 4 分钟

表值型参数( Table-valued parameters )是 SQL Server 2008 中引入的一种新特性,它提供了一种内置的方式,让客户端应用可以只通过单独的一条参化数 SQL 语句,就可以向 SQL Server 发送多行数据。

这一功能的基础是 SQL Server 2008 中最新的用户自定义表类型( User-Defined Table Types ),它允许用户将表的定义注册为全局周知类型。注册之后,这些表类型可以像本地变量一样用于批处理中、以及存储过程的函数体中,很像早期 SQL Server 版本中通用表变量的强类型化版本。但是,与通用表变量有所不同的是,用户自定义表类型的变量可以作为参数在存储过程和参数化 TSQL 中使用。

用户自定义表类型的使用有许多限制:

  • 一个用户自定义表类型不允许用来定义表的列类型,也不能用来定义一个用户自定义结构类型的字段。
  • 不允许在一个用户自定义表类型上创建一个非聚合索引,除非这个索引是基于此用户自定义表类型创建的主键或唯一约束。
  • 在用户自定义表类型的定义中,不能指定缺省值。
  • 一旦创建后,就不允许再对用户自定义表类型的定义进行修改。
  • 用户自定义函数不能以用户定义表类型中的计算列定义为参数来调用。
  • 一个用户自定义表类型不允许作为表值型参数来调用用户自定义函数。

当用户自定义表类型作为表值型参数时,还有更多限制,例如,在参数化语句或存储过程中,它们是只读的:

不允许更新多行表值型参数中的列值,也不允许插入或删除行。如果想要修改那些已经传入到存储过程或参数化语句中的表值型参数中的数据,只能通过向临时表或表变量中插入数据来实现。

在 ADO.NET 中,可以利用标准的 SqlParameter 类型来使用用户自定义表类型:

  • TypeName 参数必须设置为用户自定义表类型的名称,例如:dbo.PersonInfo
  • SqlDbType 必须设置为 SqldbType.Structured
  • Value 参数的类型数据必须与用户自定义表类型中的类型相匹配。System.Data.SqlClient 中可以通过 System.Data.DataTable 或 IList 来支持表值型参数。此外,还可以通过 System.Data.Common.DbDataReader 及其派生类(如 OracleDataReader)将多行数据转为流,然后映射到表值型参数。

在表值型参数出现以前,开发者只能使用一些替代方案来模拟它的能力:

  • 使用一连串的独立参数来表示多列和多行数据的值。使用这一方法,可以被传递的数据总量受限于可用参数的个数。SQL Server 的存储过程最多可以使用 2100 个参数。在这种方法中,服务端逻辑必须将这些独立的值组合到表变量中,或是临时表中进行处理。
  • 将多个数据值捆绑到带限定符的字符串或是 XML 文档中,然后再将文本值传递到一个存储过程或语句中。这种方式要求存储过程或语句中要有必要的数据结构验证和数据松绑的逻辑。
  • 为多行数据的修改创建一系列独立的 SQL 语句,就像在一个 SqlDataAdapter 中调用 Update 方法时产生的那些一样,这些更新可以被独立地或是分组成批地提交到服务器。不过,尽管成批提交中含有多重语句,但这些语句在服务端都是被分开独立执行的。
  • 使用 bcp 实用程序或是使用 SqlBulkCopy 对象将多行数据载入一个表中,尽管这一技术效率很高,但它并不支持在服务端执行,除非数据是被载入到临时表或是表变量中。

查看英文原文 Table-Valued Parameters in SQL Server

2008-09-02 20:211915
用户头像

发布了 90 篇内容, 共 12.6 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

报名开启!飞桨AI for Science公开课与共创计划邀您来学,探索AI与科学的融合

飞桨PaddlePaddle

人工智能 AI for Science

dapp软件定制开发公司 DApp开发步骤全解析

西安链酷科技

DAPP系统开发 dapp开发

重磅!百度知识增强大语言模型关键技术荣获“2023世界互联网大会领先科技奖”

飞桨PaddlePaddle

百度 互联网大会 大语言模型

DBeaver Ultimate注册激活版下载(数据库管理软件)

影影绰绰一往直前

DBeaver下载 DBeaver注册版 DBeaver激活版

《用友企业绩效管理白皮书》要点解读之整合计划

用友BIP

企业绩效管理

VMware Fusion Pro for mac(vm虚拟机)13.5.0激活码

芷水微澜_cde4d8

VMware Fusion Pro 13 VMware Fusion Pro VMware Fusion Pro下载 VMware Fusion Pro破解版

BI 数据可视化平台建设(1)—交叉表组件演变实战

vivo互联网技术

架构演进 BI可视化 表格组件 交叉表

PostgreSQL 技术内幕(十一)位图扫描

酷克数据HashData

Dapp开发的技术原理和设计方案

西安链酷科技

DAPP系统开发

KeyShot Pro 2023中文特别版下载(3D渲染和动画制作)

影影绰绰一往直前

KeyShot Pro2023 KeyShot Pro下载 KeyShot Pro破解版

链游开发DAPP智能合约开发搭建

西安链酷科技

DAPP系统开发

另辟蹊径者 PoseiSwap:背靠潜力叙事,构建 DeFi 理想国

大瞿科技

用户信息授权报错“无效的AppID参数”问题排查解决过程

盐焗代码虾

Java 支付宝 经验分享 支付宝报错 排查思路

区块链底层公链开发 公链开发团队

西安链酷科技

公链开发 节点搭建

区块链技术投入公链开发,涨知识了 公链开发团队

西安链酷科技

公链开发 公链团队

开发一个dapp需要多少钱?具体设计那些费用?

西安链酷科技

DAPP系统开发

链游开发外包公司

西安链酷科技

区块链游戏 gamefi 链游开发 游戏链改

适用于即席查询(Ad-Hoc)的OLAP引擎

Western Panda

数据库 大数据 开源 数据分析 OLAP

IDO预售系统开发:构建去中心化众筹平台的技术实践

西安链酷科技

IDO代币预售

模拟ASP.NET Core MVC设计与实现

EquatorCoco

ASP.NET Core 框架 教程分享

小红书万亿级社交网络关系下的图存储系统的架构设计与实践

JackJiang

网络编程 即时通讯 IM

昇腾CANN DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶

华为云开发者联盟

人工智能 华为云 昇腾CANN 华为云开发者联盟

搭建一个dapp钱包要多少钱

西安链酷科技

软件开发 区块链系统开发 区块链软件搭建

IDO私募预售平台软件系统开发

西安链酷科技

IDO代币预售

All in数字化!这场大会重新定义建筑行业人才模式

用友BIP

人力资源

对话在行人|安恒信息:通过企业数智化建设实现主营业务100%增长

用友BIP

数智化领先实践

王文京:中国智能会计将引领全球会计创新

用友BIP

智能会计

案例研究:利用合成数据提高对象检测性能

3D建模设计

合成数据

公链开发技术团队 如何设计一个稳定、高效的公链系统架构?

西安链酷科技

DAPP系统开发 区块链浏览器开发 区块链技术公司

Dapp技术开发到底需要花多少钱?

西安链酷科技

区块链 dapp开发

Capture One 23 Enterprise for Mac(RAW图像编辑软件) 企业版 16.3.1.23永久激活版

mac

windows 图像处理软件 苹果mac Capture One 23

SQL Server中的表值型参数_.NET_Al Tenhundfeld_InfoQ精选文章