我正在使用PHP与MSSQL数据库的odbc连接。
目前,我在一个字符串中有大约1900个插入语句,用分号分隔,并在1个odbc_execute语句中运行。
首先,这是一个不好的方法吗?我应该在for循环中单独处理每个insert语句吗?
此外,我目前正在使用的方式,由于某种原因,只有一个大的语句,插入的最多483行没有错误。如果我复制运行的语句并通过SQL studio运行它,则所有行都会插入,但每次插入时最多只插入483行。 任何想法为什么会这样?
答案 0 :(得分:1)
每个INSERT一次网络往返将意味着很多延迟。它会很慢。
所有这些连接的SQL语句的缓冲区大小可能存在限制。
我认为您想使用预准备语句和绑定变量:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms712553(v=vs.85).aspx
你仍然可以循环处理它 - 实际上是两个。您需要一个内部循环来将INSERT添加到作为单个事务执行的批处理中,并使用外部循环来处理所有必需的批处理。
答案 1 :(得分:0)
只要您没有为每个插入运行单独的事务,一次插入一个就没有错。
对于这种“批量插入”,我通常会每100行左右运行一次事务。
我会避免试图立刻将它们全部塞进去。这样做没有什么可以获得的。
答案 2 :(得分:0)
您可以将数据放在sql-server上的文件(xml?)中,并从处理它的php请求存储过程。
的问候, /吨