Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送多个insert语句和将insert语句堆积在单个字符串中并执行该字符串以获取更多数据之间的区别_C#_Sql Server - Fatal编程技术网

C# 发送多个insert语句和将insert语句堆积在单个字符串中并执行该字符串以获取更多数据之间的区别

C# 发送多个insert语句和将insert语句堆积在单个字符串中并执行该字符串以获取更多数据之间的区别,c#,sql-server,C#,Sql Server,从C#end开始:发送多个insert语句以在数据库或数据库中插入20行或更多行 在单个字符串中堆积insert语句并执行该sql字符串。哪个更有效?优势和劣势是什么 例如: for(int i=0;i如果要发送一组插入,则应使用事务,因为这将大大提高效率 BEGIN; INSERT .... ; INSERT .... ; INSERT .... ; INSERT .... ; INSERT .... ; COMMIT; 其效率和速度明显高于 INSERT .... ; INSERT ...

从C#end开始:发送多个insert语句以在数据库或数据库中插入20行或更多行 在单个字符串中堆积insert语句并执行该sql字符串。哪个更有效?优势和劣势是什么

例如:


for(int i=0;i如果要发送一组插入,则应使用事务,因为这将大大提高效率

BEGIN;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
COMMIT;
其效率和速度明显高于

INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;

如果您试图执行大容量插入操作,我建议您查看该类,该类针对此特定操作进行了优化。相反,如果您只是对各种数据插入方法的相对性能感到好奇,那么从我的实验中可以看出,与l相比,使用表值参数具有非常高的性能大量的即席插入语句—如您所述,其中许多语句是“批量插入”

长话短说-您必须使用您的数据和模式来衡量什么最适合您。但我推荐TVP和sqlbulkcopy类。

我使用两种方法(实体框架之外)。如前所述,如果有超过5000条记录,请使用SqlBulkCopy。没有比这更快的了。它使用datatables,因此在处理对象时不是最好的

我们在业务对象中使用的另一个选项是XML。我们的业务对象有一个生成XML的序列化方法…然后我们有一个存储过程,如以下所示。它比只传递字符串有更高的子成本,但您将有sql server验证语法是否正确、列名是否正确等等。再加上sql serverr将缓存执行计划。在进行更改时,传入字符串将容易出现键入错误和问题

@xDoc XML

INSERT INTO dbo.Test(Id,Txt)
SELECT Data.Id,Data.Txt
FROM
(SELECT
    X.Data.value('Id[1]', 'int') AS Id,
    X.Data.value('Txt[1]', 'tinyint') AS Txt
FROM @xDoc.nodes('MyRootNode/MyRecord') AS X(Data)) AS Data;

请为您正在引用的每个版本提供一个简短的代码示例。并修改您的标题,它的长度太长了……我对SqlBulkCopy仍然是新手。但是,是否可以使用SqlBulkCopy将大于5000的海量数据从c#datatable(而不是Sqlserver)复制到sql server datatable?这正是它的用途:)我使用它插入了数百万条记录。
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
@xDoc XML

INSERT INTO dbo.Test(Id,Txt)
SELECT Data.Id,Data.Txt
FROM
(SELECT
    X.Data.value('Id[1]', 'int') AS Id,
    X.Data.value('Txt[1]', 'tinyint') AS Txt
FROM @xDoc.nodes('MyRootNode/MyRecord') AS X(Data)) AS Data;