方法一、
CREATE TABLE [dbo].[Users] ( Id INTEGER IDENTITY(1, 1) PRIMARY KEY , Name NVARCHAR(50) NOT NULL ) ; GO
//循環(huán)插值
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
?
--拆分函數(shù) 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
//存儲(chǔ)過程
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
//執(zhí)行
EXECUTE [dbo].[spUsers] '1,2,3,4'
方法二、
CREATE TYPE UsersIDTableType AS TABLE (ID INTEGER PRIMARY KEY); GO
//存儲(chǔ)過程
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
//調(diào)用
DECLARE @Ids UsersIDTableType INSERT @Ids VALUES ( 5 ) INSERT @Ids VALUES ( 6 ) INSERT @Ids VALUES ( 7 ) EXECUTE [dbo].[spGetUsersTable] @Ids
//在.NET下如何調(diào)用?
調(diào)用也比較簡(jiǎn)單,將參數(shù)類型限制為
SqlDbType.Structured
那么值可是是任意IEnumerable, DataTable, 或者DbDataReader。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
