【问题标题】:Insert into MSSQL with spatial index from PHP fails从 PHP 插入带有空间索引的 MSSQL 失败
【发布时间】:2014-09-30 17:57:37
【问题描述】:

我有一个存储过程,它插入到一个表中,其中一个字段具有空间索引。

当我从 SQL Server Management Studio 运行该过程时,它运行得很好。

当我从 PHP 运行它时,它返回错误: “插入失败,因为以下 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 配置为使用与 management studio 相同的 SQL 用户,并且我已尝试使用绑定参数的 mssql_query 和 mssql_execute。

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

创建过程 insert_post ( @subject AS VARCHAR(250), @body 作为 VARCHAR(2000), @纬度作为浮动, @longitude 浮动 ) 开始

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
)

结束

【问题讨论】:

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


    【解决方案1】:

    事实证明,在存储过程本身中设置选项没有任何效果。必须在调用过程之前设置它们:

    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');
    

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多