博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL SERVER IN参数化处理
阅读量:5169 次
发布时间:2019-06-13

本文共 2213 字,大约阅读时间需要 7 分钟。

方法一、

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

//循环插值

DECLARE @Counter INTEGERSET @Counter = 1WHILE ( @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    ENDGO

//执行

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

方法二、

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

//存储过程

CREATE PROCEDURE [dbo].[spGetUsersTable]    @UsersIDs UsersIDTableType READONLYAS     BEGIN        SELECT  c.ID ,                c.Name        FROM    [dbo].[Users] c                JOIN @UsersIDs t ON c.Id = t.ID    ENDGO

//调用

DECLARE @Ids UsersIDTableTypeINSERT  @IdsVALUES  ( 5 )INSERT  @IdsVALUES  ( 6 )INSERT  @IdsVALUES  ( 7 )EXECUTE [dbo].[spGetUsersTable] @Ids

//在.NET下如何调用?

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

SqlDbType.Structured

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

转载于:https://www.cnblogs.com/dyllove98/p/3177924.html

你可能感兴趣的文章
我回答了90%的面试题,为什么还被拒?
查看>>
Html - Table 表头固定和 tbody 设置 height 在IE不起作用的解决
查看>>
HDU 2262 回溯算法 递归枚举
查看>>
九度0J 1374 所有员工年龄排序
查看>>
微信小程序图片使用示例
查看>>
Ubuntu16.04+cuda8.0rc+opencv3.1.0+caffe+Theano+torch7搭建教程
查看>>
1.开发准备
查看>>
centos su命令
查看>>
CLR:基元类型、引用类型和值类型
查看>>
dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决...
查看>>
jQuery中的事件绑定的几种方式
查看>>
泥塑课
查看>>
iOS 自定义的对象类型的解档和归档
查看>>
setImageBitmap和setImageResource
查看>>
springMVC4 注解配置实例
查看>>
单片机编程
查看>>
Filter in Servlet
查看>>
Linux--SquashFS
查看>>
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>