[英]execute MSSQL user-defined function in PHP
我需要通过远程主机上的PHP(通过odbc)执行用户定义的函数。
该函数本身是一个简单的计算,并已在MS SQL Server Studio中创建,如下所示:
CREATE FUNCTION dbo.__WeightCalculation(@_Length float, @_Width float, @_Height float, @_ShapeType nvarchar(255))
RETURNS float AS
BEGIN
return (select
(CASE
WHEN @_ShapeType = 'A'
THEN (((@_Width * @_Height * 0.5) / 100) * @_Length) / 1000
WHEN @_ShapeType IN ('B', 'C', 'D', 'E')
THEN (((@_Width * @_Height * 0.75) / 100) * @_Length) / 1000
ELSE 'nA'
END) as THIS_WEIGHT)
END;
我已经能够验证此功能是否正常运行,并通过执行以下命令返回预期结果
select dbo.__WeightCalculation(10, 20, 30, 'A');
----------------------
0,03
(1 Zeile(n) betroffen)
在Management Studio中。
但是,我无法以其他方式执行此功能。
当尝试通过Web服务器上的CLI运行该功能时,即
user@server:~/tmp# isql dsn usr pwd
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select dbo.__WeightCalculation(10, 20, 30, 'A');
[ISQL]ERROR: Could not SQLExecute
SQL>
它将提示[ISQL]错误:无法执行SQL。 当试图从PHP脚本运行该功能,即
$connect = odbc_connect($dsn, $user, $pw);
$query = "SELECT dbo.__WeightCalculation(10, 20, 30, 'A')";
$result = odbc_exec($connect, $query);
$row = odbc_fetch_array($result);
echo '<pre>';
print_r($row);
echo '</pre>';
...在服务器错误日志中可以找到以下内容:
mod_fcgid:stderr:PHP警告:odbc_exec():SQL错误:[FreeTDS] [SQL Server]找不到列“ dbo”或用户定义的函数或聚合“ dbo .__ WeightCalculation”,或者名称不明确。第14行的/var/www/web/test/odbc.php中的SQLExecDirect中的状态37000
除此之外,我尝试使用DECLARE
EXEC
SELECT
执行该功能,该功能在SQL Studio中也可以按预期工作,但不能通过CLI或PHP。
我是否需要绑定参数并分别执行功能? 非常感谢有关如何通过PHP执行MSSQL用户定义函数的任何提示(因为CLI仅用于测试/验证)。
请注意:
好吧,有一点它击中了你,对吗? ;)
我的函数(由于未另行指定)是在数据库master
创建的。 实际上,我不能告诉您是否总是这样(至少当您以sa
身份登录时)-如果有人可以回答这个问题,可能会很有趣。
但是,最初为特定表创建函数的初衷(我想,@ DanGuzman是否在某个时候也想到了这一点?)是正确的,只是按照我做的方式,这是错误的,即-
CREATE FUNCTION [databasename].dbo.functionname(@params)
...
GO
-不起作用,而-
USE [databasename];
GO
CREATE FUNCTION dbo.functionname(@params)
...
GO
-确实。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.