如何向sql server預存程序傳遞一個數組

來源:互聯網
上載者:User

最近寫一段程式 要求向預存程序傳遞一個字串數組或者集合 然後通過not in進行條件判斷

仔細研究後在csdn上找到瞭解決該問題的辦法帖出來給大家共用一下

大致方法是利用傳遞長字串的形式向預存程序傳遞一個長字串。由於sqlserver沒有 splite函數

所以必須自己定義一個splite函數來進行處理

 

自訂一個函數
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(F1 varchar(100))
as
begin
 declare @i int
 set @SourceSql=rtrim(ltrim(@SourceSql))
 set @i=charindex(@StrSeprate,@SourceSql)
 while @i>=1
 begin
  insert @temp values(left(@SourceSql,@i-1))
  set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
  set @i=charindex(@StrSeprate,@SourceSql)
 end
 if @SourceSql<>''
    insert @temp values(@SourceSql)
 return
end
-執行
select * from dbo.f_splitstr('1,2,3,4',',')

 

注:'1,2,3,4'即你所傳遞的字串

同樣你可以通過 select cunt(*) from dbo.f_splitstr('1,2,3,4',',')

獲得該字串數組的長度

如果要刪除該函數使用

--刪除函數
drop function fsplit

*************************************************************************

還有另外一種方法,這是充分利用了SQL Server強大的字串功能

不過由於用到了exec命令,所以只能在預存程序中實現

create procedure f_splitstr (@SourceSql varchar(8000),@StrSeprate varchar(10))
as

create table #temp (F1 varchar(100))
declare @TmpSql varchar(8000)

select @TmpSql = 'insert into #temp values ('+ replace (@SourceSql,@StrSeprate,')
insert into #temp values (')+')'

exec(@TmpSql)

select * from #temp

drop table #temp
go

f_splitstr4 '1,2,3,4',','

結果是一樣的 .

 

 

 

 

1

2

3

4

5

6

7

8

8

9

9

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.