1

PHP 5.5 を利用して、MS SQL データベースに接続しています。接続は期待どおりに機能します。一括挿入 (約 2000 行) を実行しようとしています。PHP を使用して 2000 個の INSERT ステートメントを実行するのではなく、次のようなクエリを送信しています。

DECLARE @count INT
SET @count = 0
WHILE(@count < 2000)
BEGIN
INSERT INTO Table (Field1, Field2)
VALUES ('data1', 'data2')
SET @count = (@count + 1)
END

このクエリを SQL Server Mangement Studio に直接プラグインすると、予想どおり 2000 行が挿入されます。PHP経由でクエリを実行すると、次のようになります。

$connectInfo = array ("UID"=>'user',"PWD"=>'@pass',"Database"=>"database", "ReturnDatesAsStrings"=>true);
$link = sqlsrv_connect("dataserver",$connectInfo);

$query = "DECLARE @count INT 
SET @count = 0  
WHILE(@count < 2000) 
BEGIN 
INSERT INTO License (Field1, Field2) 
VALUES('data1','data2') 
SET @count = (@count + 1) 
END";

if(!$foo = sqlsrv_query($link,$query)) {
  die(print_r(sqlsrv_errors(), true));
}else{
  die("hooray beer time!");
}

これは、予想される2000行ではなく、524行のみをテーブルに挿入します(309行、X行、不安定な場合もあります)。エラーにはなりません。スクリプトを実行するたびに。デフォルトでは、sqlsrv_query() 関数には時間制限がありません。誰かが前にこのようなことに遭遇したことがありますか? それは私を当惑させました。

4

1 に答える 1

2

ああ、While ループに挿入するたびに、SQL は (1) 影響を受ける行 (またはその曲に何か) を示すテキストの小さな行を返すようです。次の方法でこれをオフにします。

SET NOCOUNT ON

はこの問題を改善しました。皆さんありがとう!

于 2013-11-01T13:45:11.537 に答える