我正在尝试从PHP(PHP-PDO连接)执行存储过程。存储过程可以从SQL Server Management Studio(SQL控制台)完美地测试/运行;没有错误报告。当我尝试从PHP运行它时,它无法正确执行。我设法将TRY / CATCH添加到存储过程,并且从PHP exec收到以下错误信息。有人知道这个错误吗?
注意,我正在对临时表#MY_TABLE中的数据进行动态透视。我还动态地构建了要在其后执行的合并查询字符串。这是一个复杂的存储过程。
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/
)
)
我注意到类似的问题,例如:SQL Server错误1934在对包含计算列PHP / PDO的表进行插入时发生
但是,以下是我的存储过程的顶部。我不确定为什么PHP PDO不会SET
在存储过程中使用这些语句。
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语句解决了问题。我正在使用MS SQL Server Management Studio(SSMS)来“修改”存储过程。当我这样做时,我注意到页面顶部有两个SET语句。不幸的是,这些SET语句不在ALTER PROCEDURE语句之内。因此,当我尝试将其他SET语句添加到页面顶部时,则不属于ALTER PROCEDURE语句,因此未保存(更改)。由于未以任何方式重新加载/修改页面,因此它们仍位于顶部。因此,解决方案是确保将所有更改放入ALTER PROCEDURE中。
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句