Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更正存储过程错误1934?(SQL Server/PHP)_Php_Sql_Sql Server_Stored Procedures_Pdo - Fatal编程技术网

如何更正存储过程错误1934?(SQL Server/PHP)

如何更正存储过程错误1934?(SQL Server/PHP),php,sql,sql-server,stored-procedures,pdo,Php,Sql,Sql Server,Stored Procedures,Pdo,我正在尝试使用PHP-PDO连接从执行一个存储过程。存储过程在SQLServerManagementStudio SQL控制台中测试/运行良好;未报告任何错误。当我试图从PHP运行它时,它无法正确执行。我设法向存储过程中添加了一个TRY/CATCH,并从PHP exec收到了以下错误信息。有人理解这个错误吗 注意,我正在对临时表MY_表中的数据进行动态数据透视。我还动态构建了一个合并查询字符串,该字符串将在之后执行。这是一个有点复杂的存储过程 EXEC MY_STORED_PROCEDURE '

我正在尝试使用PHP-PDO连接从执行一个存储过程。存储过程在SQLServerManagementStudio SQL控制台中测试/运行良好;未报告任何错误。当我试图从PHP运行它时,它无法正确执行。我设法向存储过程中添加了一个TRY/CATCH,并从PHP exec收到了以下错误信息。有人理解这个错误吗

注意,我正在对临时表MY_表中的数据进行动态数据透视。我还动态构建了一个合并查询字符串,该字符串将在之后执行。这是一个有点复杂的存储过程

EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'

Array
(
    [0] => EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'
    [1] => stdClass Object
        (
            [queryString] => EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'
        )

    [2] => stdClass Object
        (
            [ErrorNumber] => 1934
            [ErrorSeverity] => 16
            [ErrorState] => 1
            [ErrorProcedure] => MY_STORED_PROCEDURE 
            [ErrorLine] => 139
            [ErrorMessage] => SELECT failed because the following SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/
        )

)
USE [MYDBTEST]
GO
/****** Object:  StoredProcedure [dbo].[MY_STORED_PROCEDURE]    Script Date: 06/25/2014 14:29:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_WARNINGS ON
GO
SET ANSI_PADDING ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO 
我注意到类似的问题,例如:

但是,下面是我的存储过程的顶部。我不知道为什么PHPPDO不会在存储过程中使用SET语句

EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'

Array
(
    [0] => EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'
    [1] => stdClass Object
        (
            [queryString] => EXEC MY_STORED_PROCEDURE '24566572-290E-4FE5-9AF6-8EEE4804F091'
        )

    [2] => stdClass Object
        (
            [ErrorNumber] => 1934
            [ErrorSeverity] => 16
            [ErrorState] => 1
            [ErrorProcedure] => MY_STORED_PROCEDURE 
            [ErrorLine] => 139
            [ErrorMessage] => SELECT failed because the following SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/
        )

)
USE [MYDBTEST]
GO
/****** Object:  StoredProcedure [dbo].[MY_STORED_PROCEDURE]    Script Date: 06/25/2014 14:29:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_WARNINGS ON
GO
SET ANSI_PADDING ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO 

好的,我用SET语句解决了这个问题。我正在使用MSSQLServerManagementStudio SSMS修改存储过程。当我这样做时,我注意到页面顶部有两个SET语句。不幸的是,这些SET语句不在ALTER PROCEDURE语句中。因此,当我尝试在页面顶部添加其他SET语句时,它们不是ALTER PROCEDURE语句的一部分,因此没有保存或更改。由于页面没有以任何方式重新加载/修改,因此它们仍然位于顶部。因此,解决方案是确保在ALTER过程中进行任何更改

USE [MYDBTEST]
GO
/****** Object:  StoredProcedure [dbo].[MY_STORED_PROCEDURE] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Author:  Jeff Walters
-- Create date: 6/20/2014
-- Description: 
-- 
-- =============================================

ALTER PROCEDURE [dbo].[MY_STORED_PROCEDURE]
                (
                @id CHAR(36) = NULL
                )
AS


BEGIN

    SET ANSI_NULLS ON;
    SET QUOTED_IDENTIFIER ON;
    SET ANSI_WARNINGS ON;
    SET ANSI_PADDING ON;
    SET CONCAT_NULL_YIELDS_NULL ON;
这对我很有用:

SET ANSI_WARNINGS ON;
SET ANSI_PADDING ON;
SET CONCAT_NULL_YIELDS_NULL ON;

检查SELECT SESSIONPROPERTY'ARITHABORT'=0并将ARITHABORT设置为ON;在程序主体的顶部。这将解决1934年的错误。

您在SSMS中设置的选项可能与php环境中反映的不同。下面是关于集合选项的文档:下面是另一篇可能会有所帮助的SO文章:@DMason-我想如果我在存储过程中有集合选项,那么它们将从PHP PDO中使用。不是这样吗?有什么方法可以告诉PHP PDO在存储过程中使用SET选项吗?从您提供的信息来看,我倾向于认为SP中的SET选项应该足够了。php代码是否可能连接到错误的服务器/数据库?我远不是php的好信息来源。也许其他人可以帮助…@DMason,似乎我没有将SET语句添加到存储过程SP中。当我通过MS-SSMS修改SP时,我将SET放在ALTER过程之前。一旦我把它们放在AS或BEGIN下面,它就会按预期保存和工作。