我有一个存储过程,可以在其中一个字段中插入带有空间索引的表。
当我从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
答案 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');