将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?

What is the fastest way to pass a large amount of data from a C++ application to SQLServer Stored Procedure?

本文关键字:存储过程 SQLServer 是什么 方法 数据 应用程序      更新时间:2023-10-16

我试图以最有效的方式将C 应用程序中的XML对象的一千行传递到SQLServer存储过程。在将XML元素插入数据库之前,需要发生一些字符串处理/转换。目前,我们将每个单独的XML节点在C 应用程序中使用,然后调用SQLServer插入它(并执行一千次)。为了改善这一点,我想同时将所有1000个记录发送到SQLServer。最快的方法是什么?

另外,我已经看到我可以将XML直接发送到存储过程,但这将涉及我在数据插入数据库之前对数据进行大量处理。处理C 应用程序中的字符串,然后通过XML发送或将其发送到未加工的XML然后处理/转换字符串或将其完全传递数据的另一种方法?

设置一个表值参数,每个参数集为一行。然后使用该参数的行调用存储过程。即使您将行作为批量提交到存储过程中,每行也是与服务器的单独通信数据将发送,然后服务器将开始处理,而不是发送一个参数集,并返回了该参数集的结果)。

我不知道XML处理,这很可能取决于所需操作的性质,这听起来像是分析的工作。

基本上是:

CREATE TYPE ARGS_TABLE TABLE (ID BIGINT, DATA XML);
CREATE PROCEDURE WRAPPER_PROC
@Args ARGS_TABLE READONLY
AS
BEGIN
DECLARE @ID BIGINT, @Data XML
DECLARE ArgCurs CURSOR FOR SELECT ID, DATA FROM @Args;
OPEN ArgsCurs ;
FETCH NEXT FROM ArgsCurs INTO @ID, @Data
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC dbo.REAL_PROC @ID, @Data
FETCH NEXT FROM ArgsCurs INTO @ID, @Data
END
CLOSE ArgsCurs 
    DEALLOCATE ArgsCurs 
END