将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
What is the fastest way to pass a large amount of data from a C++ application to SQLServer Stored Procedure?
我试图以最有效的方式将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
相关文章:
- 在C++中调用 MS SQL 存储过程
- C++使用存储过程返回结果
- Visual样本存储过程从C 程序执行
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- SQL Server 2016 CLR 存储过程错误:"A system assertion check has failed"
- 将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
- 在我的代码中执行存储过程时出现问题
- 读取 Firebird 存储过程的返回值
- 在C++中通过SOCI/ODBC实现SQL Server存储过程
- 如何使用 Oracle 存储过程中C++函数
- 使用 QSqlQuery 检索 MySQL 存储过程的输出
- C++/CLI 存储过程找不到资源
- ADO 不支持存储过程中的 XML
- MSSQL服务器存储过程在从c++调用时不返回输出参数
- ODBC,SQL_SUCCESS_WITH_INFO,游标类型已更改 - 发生在具有单个 SELECT 的存储过程上
- SQL Server-使用C++ODBC调用存储过程
- 通过OCI调用Oracle存储过程,并在C++中使用out-ref游标返回结果
- 如何用ADO和c++传递null给存储过程输入参数
- 为什么我的c++扩展存储过程不写入控制台
- 使用ODB ORM执行存储过程