SQL SERVER IN参数化处理
方法一、
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参数化处理的更多相关文章
- Sql Server 的参数化查询
为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷.当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然.远没有参数化查询来的安全和快捷. 今天刚好了解了一 ...
- SQL Server中参数化SQL写法遇到parameter sniff ,导致不合理执行计划重用的一种解决方案
parameter sniff问题是重用其他参数生成的执行计划,导致当前参数采用该执行计划非最优化的现象.想必熟悉数据的同学都应该知道,产生parameter sniff最典型的问题就是使用了参数化的 ...
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...
- 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参
转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...
- SQL Server里简单参数化的痛苦
在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的简单参数化(Simple Parameterization)的一些特性和副作用.首先 ...
- Sql Server参数化查询之where in和like实现之xml和DataTable传参 (转)
在上一篇Sql Server参数化查询之where in和like实现详解中介绍了在Sql Server使用参数化查询where in的几种实现方案,遗漏了xml和表值参数,这里做一个补充 文章导读 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SQL Server 参数化 PARAMETERIZATION
ALTER DATABASE dbname SET PARAMETERIZATION SIMPLE --默认 ALTER DATABASE dbname SET PARAMETERIZATI ...
随机推荐
- SQL server语句练习
相关表: <span style="white-space:pre">create table DEPT ( <span style="white-sp ...
- CAS 单点登录
首先,何谓单点登录. 单点登录(Single Sign On),简称为 SSO,是眼下比較流行的企业业务整合的解决方式之中的一个. SSO的定义是在多个应用系统中,用户仅仅须要登录一次就能够訪问全部相 ...
- exception in thread main java.lang.NoClassDefFoundError wrong name解决方法
当不含包层次的HelloWorld.java代码(此时程序运行正常) public class HelloWorld{ public static void main(String[] args) ...
- java(样品集成框架spring、spring mvc、spring data jpa、hibernate)
这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适sprin ...
- Zeroonepack coming~^.^
今天抓的四道DP做完了==三道是用背包做的,突然想起来背包知识点总结还没做~反正时间还早..把01背包和完全背包小结了吧~~福利来啦~~噶呜~ 01背包: 基本思路: 01背包问题是最广为人知的动态规 ...
- hdu 2055 An easy problem (java)
问题: 開始尝试用字符做数组元素.可是并没实用. 在推断语句时把a z排出了. An easy problem Time Limit: 1000/1000 MS (Java/Others) Me ...
- Android常用控件之RatingBar的使用
RatingBar控件比较常见就是用来做评分控件,先上图看看什么是RatingBar 在布局文件中声明 <?xml version="1.0" encoding=" ...
- Delphi VMT的前世今生(研究一下D7的VMT表结构)
主要是TObject那些虚函数,到底放在了哪里?
- 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001
11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001 象: 在11gR2 GridInfrastructure和Database软件安装完毕之后,运行DBCA创建数据库 ...
- 我为什么要创建帮创业者找合伙人的缘创派(ycpai.com)?
我为什么要创建帮助创业者找合伙人的缘创派(ycpai.com)? 在我发出第一条离开CSDN出来创业的微博后,感谢各位朋友的鼓励.很多朋友问我一些问题,我在这里一并回答,并简单阐述一下我的理念. 问: ...