SQL Server 存储过程 数组参数 (How to pass an array into a SQL Server stored procedure)

摘要:
ResourcefromStackOverflow使用存储过程。如何传递数组参数?1.拆分和解析字符串太麻烦了。2.添加SqlServer自定义类型**sp_addtype**问题要求:您需要将数组类型的参数select*从fromUserswhereIDIN(1,2,3)传递给sp。SqlServer数据类型没有数组,但允许用户定义的类型_addtype添加用户定义的数据类型,这允许c#cod

Resource from StackOverflow

使用存储过程,如何传递数组参数?

1.分割解析字符串,太麻烦 2.添加Sql Server 自定义类型 **sp_addtype**
问题需求:需要向SP 传递数组类型的参数
select * from Users where ID IN (1,2,3 )

Sql Server 数据类型 并没有数组,但是允许自定义类型,通过 sp_addtype
添加 一个自定义的数据类型,可以允许c# code 向sp传递 一个数组类型的参数
但是不能直接使用 sp_addtype,而是需要结构类型的数据格式,如下:

CREATE TYPE dbo.IDList
AS TABLE
(
  ID INT
);
GO

有点像个是一个临时表,一种对象,这里只加了ID
在sp 中可以声明自定义类型的参数

CREATE PROCEDURE [dbo].[DoSomethingWithEmployees]
	@IDList AS  dbo.IDList readonly

Example

#### 1. First, in your database, create the following two objects
CREATE TYPE dbo.IDList
AS TABLE
(
  ID INT
);
GO

CREATE PROCEDURE [dbo].[DoSomethingWithEmployees]
	@IDList AS  dbo.IDList readonly
	
AS
	 SELECT * FROM [dbo].[Employees] 
	  where ContactId in
	   (  select ID from @IDList )
RETURN 

2. In your C# code

// Obtain your list of ids to send, this is just an example call to a helper utility function
int[] employeeIds = GetEmployeeIds();
DataTable tvp = new DataTable();
tvp.Columns.Add(new DataColumn("ID", typeof(int)));
// populate DataTable from your List here
foreach(var id in employeeIds)
      tvp.Rows.Add(id);
using (conn)
{
    SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);

    // these next lines are important to map the C# DataTable object to the correct SQL User Defined Type
    tvparam.SqlDbType = SqlDbType.Structured;
    tvparam.TypeName = "dbo.IDList";
    
    // execute query, consume results, etc. here
}

免责声明:文章转载自《SQL Server 存储过程 数组参数 (How to pass an array into a SQL Server stored procedure)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信小程序之授权登录前端开发环境安装(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于vue子组件的数据变了视图不更新的解决办法

原因是因为:    vue不能检测data中数组的变动,如利用索引直接改变一个项的值的时候,利用arr.length修改数组的长度的时候, 还有由于vue2.0 使用的是object.definepropoty进行的数据监听,导致Vue不能检测对象属性的添加和删除。 解决方法: Vue.set() 响应式新增与修改数据此时我们需要知道Vue.set()需要...

ES6新特性学习

1.字符串模板   在ES6中允许使用反 ` 来创建字符串,这种方法创建的字符串里面可以包含由美元符号$加花括号包裹的变量${vraible}。 例:var name = "小明";   console.log(`my name is ${name}`);//my name is 小明 2.let与const关键字   可以把let看成var,只是它定义的...

java 用JNA调用dll 参考文档

1Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回 2jna结构体数组JNA结构体数组 3JNA调用C语言动态链接库学习实践总结 4Java 通过 JNA 调用 DLL 返回 char * 字符串乱码问题的解决 5jna对结构体、指针、引用、拷贝参数传递的使用 6jna模拟指针开辟空间,数组首地址获取值 7JNA结构体参数传...

Numpy —— (1)基础数据结构

@ 目录 一、简介 二、创建ndarray数组 三、查看ndarray数组的属性 四、改变ndarray数组的数据类型和形状 五、ndarray数组的基本运算 5.1 标量和ndarray数组之间的运算 5.2 两个ndarray数组之间的运算 六、ndarray数组的统计方法 打赏 一、简介 Python中的list列表也可以非常灵活的处理...

sql server2014中的内存优化表/内存表(续写)

【0】基本介绍 【0.1】概述介绍 官网:https://docs.microsoft.com/zh-cn/sql/relational-databases/in-memory-oltp/introduction-to-memory-optimized-tables?view=sql-server-ver15 内存优化表是使用 CREATE TABLE (...

DELPHI字符串、数组操作函数(转)

对字符串及数组的操作,是每个程序员必须要掌握的。熟练的使用Delphi的这些函数,在编程时能更加得心应手。   1.Copy   功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(   即个数)。最后函数返回一个新的字符串(即是我...