Sql server 异构查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义

Sql server 异构查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义,sql-server,heterogeneous,ansi-nulls,Sql Server,Heterogeneous,Ansi Nulls,我查阅了整个网站,找不到适合我的解决方案 我已重新创建了存储过程,确保将以下几行作为第一行: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_WARNINGS ON GO CREATE PROCEDURE test_insert AS .... BEGIN ... END 我只有在从php调用存储过程时才会出现此错误。它在sql server中运行良好。。 我真的不知道我还能做什么请帮帮我 这是一个有效的例子。。。 像这样试试

我查阅了整个网站,找不到适合我的解决方案

我已重新创建了存储过程,确保将以下几行作为第一行:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE test_insert
AS
....
BEGIN
...
END
我只有在从php调用存储过程时才会出现此错误。它在sql server中运行良好。。
我真的不知道我还能做什么请帮帮我

这是一个有效的例子。。。 像这样试试

create procedure dbo.access_update @O_SQL_Error_State int = NULL     output

as

set ANSI_NULLS ON 

SET ANSI_WARNINGS ON    

....
....

GO

将其添加到语句之前,而不是主查询的开头

$result = mssql_query("SET ANSI_NULLS ON;");
$result = mssql_query("SET ANSI_WARNINGS ON;"); 

在另一个论坛上通常不是更好的答案,但是根据,
SET
命令必须在
CREATE过程之前。已测试并可与SQL Server 2017配合使用

例如:

SET ANSI_WARNINGS ON
SET ANSI_NULLS ON 
GO

CREATE PROCEDURE dbo.access_update 
    @O_SQL_Error_State int = NULL OUTPUT
AS
    ...

您似乎缺少的关键:连接。您正在为进程而不是连接设置选项。我无法给出正式答案,因此:@Andre Barber:您是对的,将其添加到存储过程中不起作用。需要做的事情如下:在PHP中:$sql=“EXEC my\u store\u procedure”$结果=mssql_查询(“将ANSI_NULL设置为ON”)或die(mssql_获取_最后一条消息())$结果=mssql_查询(“设置ANSI_警告打开”)或die(mssql_获取_最后一条消息())$结果=mssql_查询($sql);这对我来说很有效,但您必须在每一行后面加上GO,否则“CREATE/alterprocedure”必须是查询批处理中的第一条语句。非常感谢。