首页 > 数据库 >创建及使用一个SqlServer的用户自定义表类型(User-Defined Table Type)

创建及使用一个SqlServer的用户自定义表类型(User-Defined Table Type)

时间:2023-05-25 15:13:10浏览次数:52  
标签:newrow info string 自定义 Defined SqlServer Add dataTable Columns

创建一个用户自定义表类型(User-Defined Table Type)

CREATE TYPE [dbo].[MyTypeName] AS TABLE(
	[Field1] [nvarchar](50) NOT NULL,
	[Field2] [nvarchar](100) NULL,
	[Field3] [nvarchar](50) NULL,
	[Field4] [nvarchar](20) NULL,
	[Field5] [nvarchar](20) NULL
)
GO

直接使用sql:

declare @infos MyTypeName
insert into @infos
select 'a1','b1','c1','d1','e1'
union
select 'a2','b2','c2','d2','e2'

--select * from @infoList
exec my_proc InfoList = @infos

在C#中使用:

var dataTable = new DataTable("MyTypeName");
dataTable.Columns.Add("Field1", typeof(string));
dataTable.Columns.Add("Field2", typeof(string));
dataTable.Columns.Add("Field3", typeof(string));
dataTable.Columns.Add("Field4", typeof(string));
dataTable.Columns.Add("Field5", typeof(string));

foreach (var info in Infos)
{
	var newrow = dataTable.NewRow();
	newrow["Field1"] = info.ContractNo;
	newrow["Field2"] = info.MortgageType;
	newrow["Field3"] = info.Channel;
	newrow["Field4"] = info.CustomerType;
	newrow["Field5"] = info.LisencePlateCity;
	dataTable.Rows.Add(newrow);
}

using (SqlConnection conn = new SqlConnection(DBConn))
{
	using (SqlCommand cmd = new SqlCommand("my_proc", conn))
	{
		cmd.CommandType = CommandType.StoredProcedure;
		cmd.Parameters.Add(new SqlParameter("@InfoList", dataTable));
		conn.Open();

		using (SqlDataReader reader = cmd.ExecuteReader())
		{
			if (reader.HasRows)
			{
				while (reader.Read())
				{
				   //...
				}
			}
			reader.Close();
		}
	}
}

标签:newrow,info,string,自定义,Defined,SqlServer,Add,dataTable,Columns
From: https://www.cnblogs.com/Ceri/p/17431318.html

相关文章

  • 自定义hook - 双击事件 - useDBClick
    1.问题:业务场景中同时需要单击、双击事件,但是原生的onDoubleClick触发双击的时候会同时触发单击事件;2.解决方案:封装一个自定义hook能独立地触发单击和双击事件;根据两次点击的间隔是否小于interval来判断触发单击双击事件;//useDBClick.tsimport{MutableRe......
  • 多线程合集(三)---异步的那些事之自定义AsyncTaskMethodBuilder
    引言之前在上一篇文章中多线程合集(二)---异步的那些事,async和await原理抛析,我们从源码去分析了async和await如何运行,以及将编译后的IL代码写成了c#代码,以及实现自定义的Awaiter,自定义异步状态机同时将本系列的第一篇文章的自定义TaskScheduler和自定义的Awaiter......
  • Jenkins 自定义变量
    方法一、在构建步骤中,用Windows命令设置变量,然后写入到一份文档,给其他task调用 方法二、在构建环境里,“Injectenvironmentvariablestothebuildprocess”读取或直接定义变量。读取的话可以读取上一个方法输出的变量文件 方法三、在系统配置,设置的变量属于全局变量......
  • $ is not defined (已解决)
    $isnotdefined(已解决)F12调试页面Console错误提示因为一个项目要引用utils,而且utils里用到了JQuery,所以提示$未定义,两个JS引入顺序反了<scriptsrc="/www/xgwy_m/js/utils/utils.js"></script><scriptsrc="/js/jquery_lazyload-1.7.2/jquery.lazyload.min.js"></scr......
  • 【Redis】自定义RedisTemplate模板,拿来直接使用
    以下是自定义RedisTemplate固定模板,拿来可以直接使用:packagecom.iot.back.message.process.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMappe......
  • gitlab--内置的环境变量、自定义环境变量
    自定义环境变量gitlab给我们内置了很多的变量,但有时候满足不了我们的需求,例如我们需要往某个私有仓库推送镜像,需要账号和密码进行登录。这时候我们不想把密码写在.gitlab-ci.yml文件里面。我们就可以自定义一个环境变量来使用了。先来定义一个变量,设置-》CI/CD-》变量在.g......
  • mybatis关于自定义映射的使用方法
    在MyBatis中,可以通过SQL映射文件来自定义映射,即将一个查询结果映射成一个Java对象。在映射中,我们可以控制如何从查询结果中提取数据,并将其映射到Java对象的属性中。以下是一些常用的自定义映射方式:resultMap:使用resultMap元素来定义映射规则,可以精确地将查询结果映......
  • vs2019打包程序时添加自定义的系统必备组件
     若要创建引导程序包,必须创建产品清单产品清单 product.xml包清单 package.xml 将文件复制到引导程序文件夹位置C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\SDK\Bootstrapper\Packages文件夹下    ......
  • 自定义注解实现数据序列化时进行数据脱敏(基于springboot默认jackjson)、消息转换器
    消息转换器fastjson与jackjson问题在springboot中使用fastjson的@jsonField无效原因:在springboot默认有json(jackjson)解析工具,所以使用fastjson不会生效解决方案替换默认的解析工具(笔者不推荐,这里根据自己项目决定)fastjson替换默认的jackjson第一种方法bean方法packagecom......
  • Visual Studio Code (vscode)自定义用户代码段快速打出for循环等
    比如fori这样的快捷键就打不出代码块了自定义用户代码块的方法:工具栏>文件>首选项>用户代码片段  然后在弹出的搜索框中填写javascript.json有提示不用打全就行(会有javascript选中)  打开配置文件javascript.json这里面显示的就是编写代码块的例子"P......