首页 > 数据库 >T-SQL——关于表类型

T-SQL——关于表类型

时间:2024-09-10 18:15:29浏览次数:1  
标签:存储 自定义 参数 关于 SQL 类型 NULL CustomerTableType

目录

0. 说明

  • SQL Server 2008中引入了对表类型的支持。通过创建表类型,可以把表的定义保存到数据库中,以后在定义表变量、存储过程和用户定义的输入参数时,可以将表类型作为表的定义而重用。

1. 最简示例


--判断自定义表是否存在
IF TYPE_ID('CustomerTableType') IS NOT NULL
--删除用户自定义的表类型
EXEC SP_DROPTYPE CustomerTableType


----创建表类型
CREATE TYPE dbo.CustomerTableType AS TABLE(Id INT NOT NULL, Name NVARCHAR(10) NULL, Age INT NULL);

----使用表类型创建一个表变量
DECLARE @myTable CustomerTableType;
INSERT INTO @myTable(Id, Name, Age)VALUES(1, 'Tom', 30);

SELECT * FROM @myTable;

2. 使用场景

如何将一个表值作为存储过程的参数?

在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。
在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。
注意,表值参数是使用用户定义的表类型来声明的。所以使用之前要先定义表类型。

实现方式可以有多种,

常见的场景:


--判断自定义表是否存在
IF TYPE_ID('CustomerTableType') IS  NULL
----创建表类型
CREATE TYPE dbo.CustomerTableType AS TABLE(Id INT NOT NULL, Name NVARCHAR(10) NULL, Age INT NULL);


--创建一个存储过程,使用自定义表类型作为参数类型
CREATE PROC proc_TestTableType
      @c CustomerTableType READONLY
AS BEGIN
     --业务逻辑
END;

3. 关于C#中调用表值参数的存储过程

 using (SqlCommand cmd = new SqlCommand("存储过程名", conn))
 {
     cmd.CommandType = CommandType.StoredProcedure;
    
     SqlParameter parameter = new SqlParameter("@ProcParam", SqlDbType.Structured); //注意参数类型是:SqlDbType.Structured
    
     parameter.TypeName = "dbo.CustomerTableType"; //必须指定自定义的表类型名
    
     parameter.Value = dataTable; //赋值,参数就是C#中的Datatable对象

     cmd.Parameters.Add(parameter);
     cmd.ExecuteNonQuery();
 }

标签:存储,自定义,参数,关于,SQL,类型,NULL,CustomerTableType
From: https://www.cnblogs.com/shanzhiming/p/18405860

相关文章

  • pandas读取xlsx文件使用sqlachemy写到数据库
    pandas读取xlsx文件使用sqlachemy写到数据库要使用pandas和SQLAlchemy将Excel文件中的数据读取到数据库中,你可以按照以下步骤进行操作:安装必要的库:确保你已经安装了pandas、SQLAlchemy和openpyxl(用于读取Excel文件)。可以使用以下命令安装:pipinstallpandas......
  • sql查询字段截取
    SELECTCASEWHENSUBSTR(code,-2)='00'THENSUBSTR(code,1,LENGTH(code)-2)ELSEcodeENDAScodeFROMtest_table;说明:如果code最后两位是00的话,就截取掉,如果不是的话,就直接取code。......
  • MySQL(六)查询连续出现N次问题总结
    连续问题的本质单调递增的等差数列例如游戏连续签到7天可以获得奖品,连续出现3次的数字求解方法(1)确定什么属性连续出现三次,即哪一属性连续,哪一属性相等(2)增加额外的等差递增列,然后进行作差分组案例查询至少连续出现3次的数字Logs表:idnum11213142......
  • WTForms所有字段类型
    WTForms是一个用于Web表单验证和渲染的Python库,它提供了多种字段类型来满足不同的表单输入需求。以下是WTForms中常见的一些字段类型:StringField:文本字段,用于输入单行字符串。PasswordField:密码字段,自动将输入转化为隐藏形式(如小黑点),用于输入密码等敏感信息。TextAreaField:多......
  • WTForms中如何自定义字段类型
    在WTForms中,自定义字段类型通常涉及创建一个新的类,该类继承自wtforms.Field或其任何子类,并根据需要重写方法以实现特定的行为。以下是一个简单的例子,展示了如何创建一个自定义的字段类型:pythonfromwtformsimportField,validatorsclassMyCustomField(Field):def_......
  • MySQL主从节点运用chrony实现时钟同步
    在数据库主从复制环境中,保持主从节点之间的时间同步是非常重要的,因为数据库的复制操作通常依赖于时间戳。如果主从节点的时钟不同步,可能会导致复制延迟或者数据不一致的情况。使用chrony来同步主从数据库节点的时钟,确保它们的时间保持一致。主节点安装chronyyuminsta......
  • docker-compose部署MySQL高可用工具orchestrator
    主要对一个MySQL主从架构部署orchestartor进行高可用验证,orchestrator部署在主从架构的从节点上,当然最好是部署在其他机器上,后端数据库采用的直接是MySQL的从库,所以没有创建orchestrator的后端数据库的流程。创建yaml文件mkidr/opt/orchecd/opt/orchevimdocker-comp......
  • SparkSQL练习:对学生选课成绩进行分析计算
    题目内容:对学生选课成绩进行分析计算题目要求:(1)该系总共有多少学生;(2)该系共开设来多少门课程;(3)每个学生的总成绩多少;(4)每门课程选修的同学人数;(5)每位同学选修的课程门数;(6)该系DataBase课程共有多少人选修;(7)每位同学平均成绩;数据预览:每行数据包括以下三部分内容:学生姓名,所学......
  • 关于神经网络过拟合的问题,我来解答一下!
    我们可以逐一进行分析:一.为什么模型很快就过拟合了,也就是验证集的损失在几十次迭代后就开始上升了?模型很快出现过拟合的原因可能有几个:模型复杂度过高:如果模型(如神经网络)的容量(即参数数量、层数等)相对于数据集的规模来说过大,那么模型很容易学习到训练数据中的噪声和细节,导......
  • MySQL表的操作与数据类型
    目录前言一、表的操作1.创建一个表2.查看表的结构3.修改表 4.删除一个表二、 MySQL的数据类型0.数据类型一览:1.整数类型2.位类型3.小数类型4.字符类型前言在MySQL库的操作一文中介绍了有关MySQL库的操作,本节要讲解的是由库管理的结构——表一、表的操......