MSSQL标量函数 + PHP

4

这是我的第一个贴子/问题。我正在尝试使用以下查询在PHP中访问标量值函数:

select *, dbo.fnFunctionName_asArray(AnID,';') as refRes FROM ResourceDB where UniqueID = 'IDgoesHere'

这个查询在MS SQL Server Management Studio中可以正常运行,但是当我尝试通过PHP运行查询时,出现了一个可怕的错误。

以下是PHP代码本身:

$sql_r = "select *, dbo.fnFunctionName_asArray(AnID,';') as refRes FROM ResourceDB where UniqueID = 'IDgoesHere'";
$r_r = mssql_query($sql_r, $msdbc);

以下为错误信息:

警告:mssql_query() [function.mssql-query]:消息:由于以下 SET 选项设置不正确,选择失败:'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'。请验证 SET 选项是否正确,以便与索引视图和/或计算列上的索引以及/或过滤的索引以及/或查询通知和/或 XML 数据类型方法以及/或空间索引操作一起使用。(严重性 16)

我已经广泛搜索了存储过程的信息,但是没有涉及到 MSSQL 中的函数。我也不确定如何解释错误信息。

提前感谢您的帮助。


2
看起来你在函数中进行字符串拼接,而一些列具有NULL值,请使用COALESCE与CONCAT结合使用。 - Chandu
你是否考虑使用存储过程?这样你就可以对会话设置(如ANSI_WARNINGS等)有更多的控制。 - Aaron Bertrand
1个回答

2

错误信息是关键:

警告:mssql_query() [function.mssql-query]: 信息:选择失败,原因是以下 SET 选项的设置不正确: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'。请验证 SET 选项是否正确用于索引视图和/或计算列上的索引和/或筛选索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。 (严重级别 16)在

尝试使用某些功能时,SQL Server 对您的连接设置要求很严格。

您正在使用不同的设置连接到 SQL Server 的 SSMS 和您的 php 程序。它们的默认值必定不同。从 SSMS 和 php 中分别运行此 SQL 命令:

DBCC USEROPTIONS 

它将显示您的实际设置,这些设置是不同的。尝试使用这些设置:

SET ANSI_NULLS ON 
SET CURSOR_CLOSE_ON_COMMIT ON 
SET ANSI_NULL_DFLT_ON ON 
SET ANSI_PADDING ON 
SET QUOTED_IDENTIFIER ON 
SET ANSI_WARNINGS ON 
SET ARITHABORT ON 
SET CONCAT_NULL_YIELDS_NULL ON 
SET NUMERIC_ROUNDABORT OFF

太棒了,我是一个非常新手的数据库管理员,但我能够完全理解你在这里演示的内容。我的脚本返回了预期的值,非常完美。谢谢KM! - Kevin Collins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接