zoukankan      html  css  js  c++  java
  • SQL中in参数在存储过程中传递及使用的方法

    背景:

    1、使用存储过程

    2、存储过程中有in

    3、in括号里面的内容作为参数传递

    解决方案:

    1、直接拼接sql

    可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval

    PROCEDURE [dbo].[INSelect]
        @P_0 NVARCHAR(600)        
    AS
      DECLARE @A VARCHAR(6000)
      SET @A='SELECT * FROM testTb WHERE zip IN ('+@P_0+')' 

      然后用系统存储过程sp_executesql执行@A即可!

    2、定义方法将字符切割为集合

    切割字符串方法

    Create function  func_split_hongfei0416j (@SourceSql   varchar(8000),@StrSeprate   varchar(2))   
      returns   @temp   table(col   varchar(100))   
      as     
      begin   
      declare   @ch   as   varchar(100)   
      set   @SourceSql=@SourceSql+@StrSeprate     
      while(@SourceSql<>'')   
                      begin   
                      set   @ch=left(@SourceSql,charindex(@StrSeprate,@SourceSql,1)-1)   
      insert   @temp   values(@ch)   
      set   @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),'')   
                      end   
      return   
      end 
    

    存储过程书写demo

    CREATE PROC ps_spit_test      
    ( 
        @lettertype VARCHAR(100)  
    )      
    AS      
    BEGIN      
      select * from y_paper 
      where lettertype in (select Col As lettertype 
    from dbo.func_split_hongfei0416j(@lettertype,','))
    end
    
    exec ps_spit_test '118,148,163'
    

    如果是简单的sql直接使用第一种方法即可,

    复杂写的可以使用第二方法。

    也可以使用临时表的方法,

    不过依然需要先切割字符串。

  • 相关阅读:
    Linux的CPU负载
    C++ 内接连与外接连
    boost 串口通信
    创建型模式--单例模式
    Python urllib与urllib2
    CodeBlocks使用boost+MinGW
    Python 线程(七):local(线程局部存储)
    Python 线程(六):Timer(定时器)
    Python 线程(五):Event
    Python 线程(四):Semphore同步
  • 原文地址:https://www.cnblogs.com/xuhongfei/p/7413167.html
Copyright © 2011-2022 走看看