日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

存储过程IN参数疑难问题解决方法【真正解决】

發布時間:2024/6/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 存储过程IN参数疑难问题解决方法【真正解决】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先,我不會令大家失望,真想解決問題的認真往下看

??????? 很久很久以前,我在使用Server的存儲過程時,遇到一個問題,就是,IN(@ids)這樣的語句執行不了,其實是可以執行的,很多人提出的解決方案是,EXEC(SQL),但對于像我這樣的很多人來說,本來存儲過程效率高是因為他預執行了一次(據說是,沒驗證過),反正SQL Server肯定對他有一定的優化方案。而如果使用EXEC(SQL)相當于還要臨時組合一下,最后執行的卻是SQL語句而已,所以這種方案,不可行,至少對我來說不可行。

??????? 今天又遇到這樣的問題,你說我存儲過程都寫了這么一長段了,我再set 一下,把他們都放''里再改下,那多郁悶,通過分析:既然IN里的內容可以自己寫如in(1,2,3)或in('我','是','柳','永法')或是in(select id from tablename)。那就是說,前兩種就是我現在遇到的問題,怎么傳值進去都不行,那看來只有打最后一種方法的主意了。

??????? 就是說,只要in 里能把我傳進來的值變成一個類似表的形式就OK了。呵呵,正好前段時間研究了個函數,現在感覺應該能用上。試了下,OK一切搞定,貼上來與大家共享,原作者不知道是誰了,在些謝過。

?

?

代碼 --From?http://www.yongfa365.com/Item/PROCEDURE-IN-SQL-Server.html???
--
引用?Select?*?From?Split('1,2,3'?,?',')???
--
引用?Select?*?From?Split('我,是,www.yongfa365.com'?,?',')???
CREATE???FUNCTION?[dbo].[Split]???
(???
@c?VARCHAR(MAX)?,???
@split?VARCHAR(50)???
)???
RETURNS?@t?TABLE?(?col?VARCHAR(50)?)???
AS??
BEGIN??
????
WHILE?(?CHARINDEX(@split,?@c)?<>?0?)???
????????
BEGIN??
????????????
INSERT??@t(?col?)???
????????????
VALUES??(?SUBSTRING(@c,?1,?CHARINDEX(@split,?@c)?-?1)?)???
????????????
SET?@c?=?STUFF(@c,?1,?CHARINDEX(@split,?@c),?'')???
????????
END??
????
INSERT??@t(?col?)?VALUES??(?@c?)???
????
RETURN??
END??

??????

?? 在SQL Server Management Studio里執行這個(我使用的是SQL Server 2005如果是SQL 2000這個函數要改些內容如:VARCHAR(MAX)),會生成一個表值函數,然后使用時呢,比如你想實現:In(@ids)這時可以換成 In(select * from Split(@ids , ','))

??????? 這個函數的作用呢,就是把你輸入的字符按一定的分隔符分開,并放在一個表里的一列里,然后返回。

??????? OK,存儲過程IN參數疑難問題 是不是解決了呢,以后再遇到不用執行那個函數了,只要稍加改造你的存儲過程就OK了。

??????? 如果你覺得還不夠簡單或者沒看會,建議你直接操作。還是不會,那只能說你不夠心靜!

?

stuff函數的解釋:

Select stuff("abcdef",2,3,"ghijk")

go

結果:aghijk

stuff的功能:刪除指定長度的字符串并在指定的起始點插入另一組字符

STUFF( character_expression ,start ,length ,character_expression )

character_expression :操作的字符,

start:刪除和插入的起始點,

length:刪除的長度,

character_expression :要插入的字符

-------------------------------------------------------------------------------------------

select patindex('%jinweida%','123jinweida54')

go

結果:4

功能:返回模式在字符串中第一次出現的位置

patindex( '%pattern%' ,expression )

pattern:要查找的模式

expression:被找的字符串

?

?

?

轉載于:https://www.cnblogs.com/jhxk/articles/1802707.html

總結

以上是生活随笔為你收集整理的存储过程IN参数疑难问题解决方法【真正解决】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。