Поиск в течение одной недели и не нашел контент, который я могу использовать для выполнения хранимой процедуры. Сценарий:
Я скопировал код, который запускается при управлении SQL Server 2014 в окне Profiler.
Я открыл SQL Studio и HeidiSQL и запустил запросы, и он работает нормально и возвращает ожидаемый результат.
Когда я попытался вставить и изменить этот контент, чтобы получить тот же результат, что и у SQL-клиентов, он не запускался, как в SQL-клиентах. Как я могу это достичь?
например: В моем SQL у меня есть 128 vars, которые я должен объявить для запуска хранимой процедуры, но чтобы быть более простым, я опубликую только один var, имея в виду, что sintaxe одинаково для одного или 128 vars правильно?
declare @var01 varchar(1000) set @var01='.$var01.'
EXEC
stored_procedure_y
@var01 output
SELECT
@var01 AS any_value
Я пробовал много способов выполнить команды SQL без успеха. Некоторые примеры, которые я пытался запустить:
последний
$declare_vars = 'declare @var01 varchar(1000) set @var01='.$var01.';
$exec_sp = 'EXEC operacao_sitef @var01 output;
$select_retorno = 'SELECT @var01 AS any_value;
$queryDeclare = $this->db->query($declare_vars);
$queryExec = $this->db->query($exec_sp);
$queryRetorno = $this->db->query($select_retorno);
return $queryRetorno;
Не работает.
Другие
$query = $this->db->query('
declare @var01 varchar(1000) set @var01='.$var01.'
EXEC
operacao_sitef
@var01 output
SELECT
@var01 AS any_value
');
return $query;
И не работал. Любая помощь будет оценена по достоинству. Я новичок с SP и не знаю, как назвать это с помощью codeigniter и собрать результаты для завершения операции.
Рад сказать, что я сохраню свою работу.
Здесь идет сообщение, которое решило мою проблему. Помня, что я работаю с codeigniter в базе данных php и mssql:
В модели:
public function execute_sp($var1 = NULL,$var2 = NULL, $var3 = NULL, $var4 = NULL, $var5 = NULL, $var6 = NULL, $var7 = NULL, $var8 = NULL, $var9 = NULL, $var10 = NULL){
$sp = "stored_procedure_name ?,?,?,?,?,?,?,?,?,? "; //No exec or call needed
//No @ needed. Codeigniter gets it right either way
$params = array(
'PARAM_1' => NULL,
'PARAM_2' => NULL,
'PARAM_3' => NULL,
'PARAM_4' => NULL,
'PARAM_5' => NULL,
'PARAM_6' => NULL,
'PARAM_7' => NULL,
'PARAM_8' => NULL,
'PARAM_9' => NULL,
'PARAM_10' =>NULL);
$result = $this->db->query($sp,$params);
В контроллере:
$var1 = 'value';
$var2 = 'value';
$var3 = 'value';
$var4 = 'value';
$var5 = 'value';
$var6 = 'value';
$var7 = 'value';
$var8 = 'value';
$var9 = 'value';
$var10 = 'value';
$this->model->sp($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10);
Оно работает!
источник, который так помог: проблема с выполнением хранимой процедуры с PHP на ответ SQL SERVER от пользователя @Ulises Burlando
Я так решил.
Я использую драйвер PDO.
Метод simple_query возвращает объект PDOStatement и одну важную точку SET NOCOUNT ON
class Pump_Model extends CI_Model
{
public function getPumpStatisticSpById($pumpId)
{
$result = $this->db->simple_query("SET NOCOUNT ON
DECLARE @return_value int
EXEC @return_value = [dbo].[spPumpStatistics]
@PumpID = $pumpId")->fetch(PDO::FETCH_OBJ);
return $result;
}
}
function () {
$query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1");
return $query->result();
}