Запустите хранимую процедуру для каждого val в массиве - PullRequest
0 голосов
/ 10 октября 2011

Не могу обернуть голову вокруг этой ..

У меня есть две отдельные хранимые процедуры, давайте их назовем:

createTable (takes a varchar userID as input)
runReport (takes two dates for input, as varchar)

createTable создает виртуальную таблицу с именем ## tempTable (если он не существует и добавьте предоставленный идентификатор пользователя).Поэтому, если я запускаю

EXEC createTable 'user-32'
EXEC createTable 'user-33'
EXEC createTable 'user-34'

, тогда у меня есть эти идентификаторы в ## tempTable.

После этого я хочу запустить это:

 EXEC runReport '2011-01-01', '2011-10-01'

Что должно дать мнебольшой вкусный выходной.Дело в том, что это работает безупречно, когда выполняется так:

 mssql_query("EXEC createTable 'user-32'");
 mssql_query("EXEC createTable 'user-33'");
 mssql_query("EXEC createTable 'user-34'");
 mssql_query("EXEC runReport '2011-01-01', '2011-10-01'");

Но когда я пытаюсь зациклить строки createTable, runReport-SP не возвращает никаких данных.

Пример:

$userIDs = explode(',', $userID_str);
foreach ($userIDs as $user) {
  if (mb_strlen($user) > 0) {
    mssql_query("EXEC createTable '$user'");
  }
}

Мне интересно, может ли это быть как-то связано с разорванным соединением или чем-то другим?Кажется, что runReport-SP может найти #tempTable, но не может читать из него, когда я использую цикл.

Есть идеи?

Спасибо!:)

1 Ответ

0 голосов
/ 10 октября 2011

А как насчет вызова ваших процедур таким образом:

$conn = mssql_connect(...);
$stmt = mssql_init("createTable", $conn);
foreach ($userIDs as $user) {
    if(mb_strlen($user) > 0) {
        mssql_bind($stmt, "@userID", &$user, SQLVARCHAR);
        mssql_execute($stmt);
    }
}

$stmt = mssql_init("runReport", $conn);
mssql_bind($stmt, "@date1", "2011-01-01", SQLVARCHAR);
mssql_bind($stmt, "@date2", "2011-01-01", SQLVARCHAR);
$result = mssql_execute($stmt);
print_r(mssql_fetch_array($result));

?

...