SQL SERVER IN参数化处理

系统 1771 0

方法一、

    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参数化处理


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论