使用PHP的空间索引插入MSSQL失败

时间:2014-09-30 17:57:37

标签: php sql sql-server stored-procedures spatial-index

我有一个存储过程,可以在其中一个字段中插入带有空间索引的表。

当我从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用户,并且我已尝试使用绑定参数的mssql_query和mssql_execute。

空间索引位于字段post.location上 如果我删除它的空间索引,但我需要空间索引。

CREATE PROCEDURE insert_post (     @subject AS VARCHAR(250),     @body AS VARCHAR(2000),     @latitude AS FLOAT,     @longitude AS FLOAT )  AS BEGIN

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
)

END

1 个答案:

答案 0 :(得分: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');
相关问题