SQL Server存储过程在数组中的单个表中多次插入



我正在使用一个存储过程将记录插入表中。在一个循环中至少这样做12次,以插入多个记录,这是非常低效的。

这是创建的过程

 Create PROC [dbo].[SP_INSERT_G_SAMPLING]
 @GameID INT,
 @ScoreID INT
 as 
 begin
 INSERT INTO GAMESCORE (GAMEID, SCOREID) VALUES
 (@GameID, @ScoreID)
 end

我传递ex(1,3)的值,并从网站上循环更多的值。

然而,我想一次性传递所有值,如(1,3)、(4,5)、(8,9)

然后改变上述过程以接收和插入多行。

ALTER PROC [dbo].[SP_INSERT_G_SAMPLING]
@totalinsert nvarchar(Max) 
INSERT INTO GAMESCORE (GAMEID, SCOREID) VALUES
(@totalinsert)

@totalinsert类似于从网页推送的(1,3)、(4,5)、(8,9)。

任何帮助都将不胜感激

您要做的是编写一个表值函数,该函数接受多值字符串并将其分解为一个表对象。如果您可以将源更改为使用记录分隔符而不是逗号集,那么处理起来会稍微容易一些。一个例子是这样的。

下面的内容纯粹是psuedo,没有经过任何验证,只是想让你大致了解一下该去哪里。

例如:@TotalInsert=1,2|4,5|8,9

DECLARE @Results TABLE
  (
     value1 INT,
     value2 INT
  )
DECLARE @setlist VARCHAR(max);
WHILE Len(@TotalInsert) > 0
  BEGIN
      SET @setlist = LEFT(@totalinsert, Charindex('|', @totalinsert))
      INSERT INTO @results
      SELECT LEFT(@setlist, Charindex(',', @setlist) - 1),
             RIGHT(@setlist, Charindex(',', Reverse(@setlist)) + 1)
      SET @totalinsert = RIGHT(@totalinsert, Len(@totalinsert) - Len(@setlist))
  END  

我假设您的网站使用.NET,因为您也在使用SQL Server。

看看表值参数,这个页面还包括一个如何在.NET.中使用表值参数的好例子

请查看此处,以获得在T-SQL中使用表值参数生成存储过程的更好示例。

以下是完整的讨论:

http://www.sommarskog.se/arrays-in-sql-2005.html#XMLlist%20of%20values

就我个人而言,我将xml发送到存储过程,我将其"分解"到@variable或#temp表中,然后从那里执行INSERT/UPDATE/MERGE/DELETE。

下面是关于xml切碎的更全面的讨论。

http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html

我个人的诀窍是创建一个强数据集,用行填充强数据集并使用ds.GetXml()将xml向下发送到TSQL。有了强大的数据集,我在填充值时会得到强大的类型。但归根结底,数据集只是一些超级花哨的xml。

最新更新