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
}

最新文章

  1. Java界面设计 Swing(1)
  2. vs2012 error c4996: This function or variable may be unsafe
  3. [html5]placeholder默认颜色
  4. ios iPhone的一些基础知识,扫盲
  5. java_jdbc_可变参数_MetaData
  6. 基于蓝牙4.0(Bluetooth Low Energy)胎压监测方案设计
  7. 转-Tomcat 8 安装和配置、优化
  8. python基础操作_文件读写操作
  9. linux socket编程:简易客户端与服务端
  10. java 动态代理 , 多看看。 多用用。
  11. form表单中多个button按钮必须声明type类型
  12. JsonLayout log4j2 json格式输出日志
  13. [UE4]控制流
  14. Linux系统软件包的管理(4)
  15. vue路由router的三种传参方式
  16. Eclipse启动时提示fail to create the Java Virtual Machine问题的解决办法
  17. 数据库和struts2的拦截器
  18. Splunk的安装与使用
  19. python学习笔记——创建事件对象Event
  20. [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)

热门文章

  1. 自动签发https证书工具 cert manager
  2. java基础之 数据类型 & 值传递 引用传递 & String & 四种引用类型
  3. 【python学习案例】python判断自身是否正在运行
  4. win7下每次打开Excel2007都提示向程序发送命令时出现问题的解决方案
  5. losetup命令使用
  6. SSL密钥协商过程分析
  7. JVM调优前戏之JDK命令行工具---jstack
  8. 微信小程序:防止多次点击跳转(函数节流)
  9. CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表
  10. 打印出三位数的水仙花数Python