方法一、

CREATE TABLE [dbo].[Users]
(
Id INTEGER IDENTITY(1, 1)
PRIMARY KEY ,
Name NVARCHAR(50) NOT NULL
) ;
GO

//循环插值

DECLARE @Counter INTEGER
SET @Counter = 1
WHILE ( @Counter <= 100 )
BEGIN
INSERT Users
( Name
)
VALUES ( 'Test Users #' + CAST(@Counter AS VARCHAR(10))
)
SET @Counter = @Counter + 1
END
--拆分函数
CREATE FUNCTION dbo.fnSplit
( @List varchar(8000),
@Delimiter varchar(5)
)
RETURNS @TableOfValues table
( RowID smallint IDENTITY(1,1),
[Value] varchar(50)
)
AS
BEGIN DECLARE @LenString int WHILE len( @List ) > 0
BEGIN SELECT @LenString =
(CASE charindex( @Delimiter, @List )
WHEN 0 THEN len( @List )
ELSE ( charindex( @Delimiter, @List ) -1 )
END
) INSERT INTO @TableOfValues
SELECT substring( @List, 1, @LenString ) SELECT @List =
(CASE ( len( @List ) - @LenString )
WHEN 0 THEN ''
ELSE right( @List, len( @List ) - @LenString - 1 )
END
)
END RETURN END

//存储过程

CREATE PROCEDURE [dbo].[spUsers]
@UsersIDs VARCHAR(8000)
AS
BEGIN
SELECT u.Id ,
u.Name
FROM [dbo].[Users] u
JOIN dbo.fnSplit(@UsersIDs, ',') t ON u.Id = t.value
END
GO

//执行

EXECUTE [dbo].[spUsers] '1,2,3,4'

方法二、

CREATE TYPE UsersIDTableType AS TABLE (ID INTEGER PRIMARY KEY);
GO

//存储过程

CREATE PROCEDURE [dbo].[spGetUsersTable]
@UsersIDs UsersIDTableType READONLY
AS
BEGIN
SELECT c.ID ,
c.Name
FROM [dbo].[Users] c
JOIN @UsersIDs t ON c.Id = t.ID
END
GO

//调用

DECLARE @Ids UsersIDTableType
INSERT @Ids
VALUES ( 5 )
INSERT @Ids
VALUES ( 6 )
INSERT @Ids
VALUES ( 7 )
EXECUTE [dbo].[spGetUsersTable] @Ids

//在.NET下如何调用?

调用也比较简单,将参数类型限制为

SqlDbType.Structured

那么值可是是任意IEnumerable, DataTable, 或者DbDataReader。

SQL SERVER IN参数化处理的更多相关文章

  1. Sql Server 的参数化查询

    为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷.当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然.远没有参数化查询来的安全和快捷. 今天刚好了解了一 ...

  2. SQL Server中参数化SQL写法遇到parameter sniff ,导致不合理执行计划重用的一种解决方案

    parameter sniff问题是重用其他参数生成的执行计划,导致当前参数采用该执行计划非最优化的现象.想必熟悉数据的同学都应该知道,产生parameter sniff最典型的问题就是使用了参数化的 ...

  3. SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

    数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...

  4. 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参

    转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...

  5. SQL Server里简单参数化的痛苦

    在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的简单参数化(Simple Parameterization)的一些特性和副作用.首先 ...

  6. Sql Server参数化查询之where in和like实现之xml和DataTable传参 (转)

    在上一篇Sql Server参数化查询之where in和like实现详解中介绍了在Sql Server使用参数化查询where in的几种实现方案,遗漏了xml和表值参数,这里做一个补充 文章导读 ...

  7. 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...

  8. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  9. SQL Server 参数化 PARAMETERIZATION

    ALTER DATABASE  dbname  SET PARAMETERIZATION SIMPLE  --默认 ALTER DATABASE  dbname  SET PARAMETERIZATI ...

随机推荐

  1. hdu 1262 寻找素数对 数论 打表。

    寻找素数对 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. 基础知识(3)- Java的基本程序设计结构

    3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型  3.3.1 整型  3.3.2 浮点类型  3.3.3 char类型  3.3.4 boolean类型 3.4 变量  3.4.1 ...

  3. Java的HashCode

    ·HashCode就是根据对象存储在内存的地址计算出的一个值.这个值可以标识这个对象的位置.也可以对比两个引用变量是否指向同一个对象. ·String重写了hashCode方法——改为根据字符序列计算 ...

  4. Jenkins: 使用Jenkins搭建持续集成(CI)环境

    http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java We ...

  5. hdu 2147 SG函数打表(手写也可以) 找规律

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others) Total ...

  6. javascript (六) 引用外部js文件

    外部的 JavaScript 也可以把脚本保存到外部文件中.外部文件通常包含被多个网页使用的代码. 外部 JavaScript 文件的文件扩展名是 .js. 如需使用外部文件,请在 <scrip ...

  7. web desktop在线演示

    http://mydesk.sinaapp.com 基于extjs的web desktop应用框架. 1.跨浏览器 2.动态载入所需css,js文件 3.权限管理 4.支持多语种 5.支持asp,js ...

  8. Apache htaccess 重写假设文件存在!

    假设文件 data/cache/index.html 存在.那么才重写. 否则使用默认的MVC 重写.by default.fu@foxmail.com RewriteEngine on Rewrit ...

  9. hive编程指南--employees表数据定义

    hive编程指南中有个employees表,默认的分隔符比較繁杂,编辑起来不太方便(普通编辑器编辑的控制字符^A等被当成字符串处理了,没有起到分隔符的作用). 收集的解决方式例如以下: http:// ...

  10. Java 建立mysql数据库连接的语句

    每次在面试时被问到jdbc的数据路链接过程都卡着,这次不怕了,背会了... 第一个,比较粗糙的 try{   Class.forName("com.mysql.jdbc.Driver&quo ...