sql — вставка в MSSQL с пространственным индексом из PHP завершается неудачно

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

Когда я запускаю процедуру из SQL Server Management Studio, она работает нормально.

Когда я запускаю его из PHP, он возвращает ошибку:
«INSERT не удалось, потому что следующие параметры SET имеют неправильные настройки:« CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING ». Убедитесь, что параметры SET правильны для использования с индексированными представлениями и / или индексами по вычисляемым столбцам и / или отфильтрованным индексам и / или запросам уведомлений и / или методы типа данных XML и / или операции пространственного индекса «

Из Management Studio я пробовал много разных комбинаций настроек, пока не нашел список, который у меня есть в процедуре ниже.

В Managment Studio ошибка изменяется в зависимости от заданных мною опций, но PHP всегда отвечает: «CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING»

Я настроил PHP для использования того же пользователя SQL, что и Management Studio, и я пробовал и mssql_query, и mssql_execute со связанными параметрами.

Пространственный индекс находится на поле post.location
Если я удаляю пространственный индекс, он работает, но мне нужен пространственный индекс.

СОЗДАТЬ ПРОЦЕДУРУ insert_post
(
@subject AS VARCHAR (250),
@body AS VARCHAR (2000),
@ latitude AS FLOAT,
@longitude AS FLOAT
)
КАК НАЧАТЬ

SET NOCOUNT ON

SET ANSI_WARNINGS ON
SET ANSI_PADDING ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF

DECLARE @location AS geography = geography::Point(@latitude, @longitude, 4326)

INSERT INTO post
(
subject,
body,
location
) VALUES (
@subject,
@body,
@location
)

КОНЕЦ

0

Решение

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

mssql_query('SET CONCAT_NULL_YIELDS_NULL ON');
mssql_query('SET ANSI_WARNINGS ON');
mssql_query('SET ANSI_PADDING ON');

$stmt = mssql_init('insert_post');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]