我问的问题与Execute multiple SQL commands in one round trip有关但不完全相同,因为我在更大范围内遇到了这个问题:
我有一个包含许多不同SQL命令(ExecuteNonQuery)的输入文件,我必须使用.net应用程序进行处理。 例如:
INSERT INTO USERS (name, password) VALUES (@name, @pw); @name="abc"; @pw="def";
DELETE FROM USERS WHERE name=@name; @name="ghi";
INSERT INTO USERS (name, password) VALUES (@name, @pw); @name="mno"; @pw="pqr";
所有命令都有参数,所以我想要.net提供的参数机制。但我的应用程序必须阅读这些语句并在可接受的时间跨度内执行它们。在一个文件中可能有多个语句。
我的第一个想法是使用带有参数的SQLCommand,因为这确实是正确的方法(参数由.net转义)但是我不能等待50毫秒来完成每个命令(与DB进行网络通信)服务器,...)。我需要一种链接命令的方法。
我的第二个想法是逃避并自己插入参数,这样我就可以在一个SQLCommand中组合多个命令:
INSERT INTO USERS (name, password) VALUES ('abc', 'def'); DELETE FROM USERS WHERE name=@name; @name='ghi'; INSERT INTO USERS (name, password) VALUES ('mno', 'pqr');
但是我对此解决方案感到不安,因为如果有预定义的函数,我不想自己逃避输入。
你会做什么?谢谢你的回答,克里斯答案 0 :(得分:0)
有趣的困境.. 我会建议其中任何一个:
答案 1 :(得分:0)
假设输入中的所有内容都有效,我会做的是:
@name
参数执行两个查询)您(可能)无法在一个批次中运行此操作的原因是因为单个批处理中的参数限制为2100(至少在我使用SQL Server执行此操作时);根据您获得的性能,您需要调整批次分离限制。 250-500最适合我的工作量; YMMV。
我不做的一件事是多线程的。如果输入是任意的,程序不知道操作的顺序是否重要;因此,您无法开始将查询拆分为同时运行。
老实说,只要你能以某种方式获得服务器的查询,你就可能处于良好的状态。只有“数千”的陈述,整个过程不会花费很长时间。 (我写的应用程序必须用数百万条语句来完成。)